windows で jstree を使うときの注意

jstree はとても便利なもので、4年ほど前に苦労して導入し、その後はサーバー上のコンテンツを素早く閲覧するためには私にとっては欠かせないものになっています。

linux で動いていたプログラムが windows では動かない

windows の xampp で jstree を動かそうとすると以下のようなエラーが出ます。


TypeError: k[c[o].parent.toString()] is undefined

data ディレクトリの内部を再帰的に検索して json data を作成する php は、


<?php

function list_files($dir){
	$rootDir = './data/' ;
	$list = array();
	$files = scandir($dir);
	$family = array();
	foreach($files as $file){
		if($file == '.' || $file == '..'){
			continue;
		} else if (is_file($dir . $file)){
 			$id = str_replace($rootDir, "", $dir . $file);
 			$parent = trim(str_replace($rootDir, "", $dir),'/');
 			if($parent==="") {$parent="#";};
 			$family[] = array("id"=>$id, "parent"=>$parent, "text"=>$file, 'icon' => 'jstree-file') ;	
			$list[] = $dir . $file;
		} else if( is_dir($dir . $file) ) {
 			$id = str_replace($rootDir, "", $dir . $file);
 			$parent = trim(str_replace($rootDir, "", $dir),'/');
 			if($parent==="") {$parent="#";};
 			$family[] = array("id"=>$id, "parent"=>$parent, "text"=>$file) ;
			$list[] = $dir;
			$list = array_merge($list, list_files($dir . $file . DIRECTORY_SEPARATOR));
			$family = array_merge($family, list_files($dir . $file . DIRECTORY_SEPARATOR));      
		}
	}
	return $family;
}

$dir = './data/' ;
$family = list_files($dir) ;

foreach($family as $key => $value){
	$modified[$key] = $value["parent"];
}
array_multisort($modified, SORT_DESC, $family);

header('Content-type: application/json; charset=utf-8');
echo json_encode($family);

ちょっと調べて「DIRECTORY_SEPARATOR」に問題があるのではないかと考え、これを’/’に変更したら動きました。

windows の「DIRECTORY_SEPARATOR」は’\’なのですが、python でもこれを使うとエラーが出ることがありました。