Привет, я пытаюсь передать несколько массивов с php на javascript. Для некоторых из них это работает, для других нет. Я получаю массив имен файлов и массив, который содержит содержимое нескольких текстовых файлов.
<?php $album="./images/text_".$benutzerLang."_album1/"; $fileArray=lsRandom("./images/album1"); $listTextArray=initTexts($album,$fileArray); $falseArray=lsRandom("./images/album2"); print $listTextArray[0]; ?> <script language="javascript" type="text/javascript"> var filesArray=new Array(5); var falseArray=new Array(5); var textListArray=new Array(5); <?php $i=0; foreach($fileArray as $element){ print 'filesArray['.$i.']="'.$element.'";'; $i++; } $i=0; foreach($falseArray as $element){ print 'falseArray['.$i.']="'.$element.'";'; $i++; } $i=0; foreach($listTextArray as $element){ print 'textListArray['.$i.']="'.$element.'";'; $i++; } ?> function createText(){//... </script> <?php function lsRandom($foldername){ $files = array(); $returnFiles=array(); $indexes=array(); $currentPath=getcwd(); chdir($foldername); // Get the all files and folders in the given directory. $files = glob("*", GLOB_BRACE + GLOB_MARK); $indexes=(array_rand($files,5)); shuffle($indexes); foreach($indexes as $in){ $returnFiles[$in]=$files[$in]; } chdir($currentPath); return $returnFiles; } function getFileText($fileName,$path){ $filePath=''.$path.''.$fileName.''; //$file=fopen($filePath,'r'); //$text=fread($file,filesize($filePath)); $text=file_get_contents($filePath,false); return $text; } function initTexts($album, $images){ $textArray1=array(); $i=0; foreach($images as $im){ $nameArray=explode(".",$im); $textName=''.$nameArray[0].'.txt'; $textArray1[$i]=getFileText($textName, $album); $i++; } return $textArray1; } ?>
Проблема заключается в $ listTextArray. В 8-й строке я могу напечатать весь массив $ listTextArray, который содержит содержимое некоторых небольших текстовых файлов, и он работает. Но далее в «foreach-loop». Он больше не работает. Как только я использую переменную $ listTextArray во втором блоке php, остальная часть моего php-кода больше не выполняется. Я не знаю, почему он не может получить доступ к $ listTextArray в этой части. Потому что это не проблема с другими массивами $ fileArray и $ falseArray.
Некоторые общие рекомендации:
php.log
, error.log
или httpd.log
или спросите администраторов (ов) вашего сервера. Попробуйте использовать print_r()
на своих массивах, чтобы узнать, есть ли разница в том, как они структурированы. Например, сразу после установки массивов в PHP:
print_r($fileArray); print_r($listTextArray); print_r($falseArray);
Вместо того, чтобы создавать массивы JS через циклы, попробуйте использовать встроенную функцию json_encode()
. Это упрощает ваш код PHP и может вызвать более полезные сообщения об ошибках при возникновении проблем:
var filesArray=<?php json_encode($fileArray) ?>; var falseArray=<?php json_encode($falseArray) ?>; var textListArray=<?php json_encode($listTextArray) ?>;
вы начинаете
var textListArray=new Array(5);
но попытайтесь использовать
listTextArray
Используйте одно и то же имя, и все будет в порядке
Проблема уже решена для вас. Вместо этого используйте json_encode
.
print('filesArray = '.json_encode($filesArray));
Обратите внимание, что json_encode
требует, чтобы ваши данные были закодированы utf8. Но вы все равно должны это сделать.