Я пытаюсь получить рекурсивный список каталогов на основе HTML на основе кода здесь:
http://webdevel.blogspot.in/2008/06/recursive-directory-listing-php.html
Код работает нормально, но он вызывает некоторые ошибки:
Строгие стандарты: только переменные должны передаваться по ссылке в C: \ xampp \ htdocs \ directory5.php в строке 34
Строгие стандарты: только переменные должны передаваться по ссылке в C: \ xampp \ htdocs \ directory5.php в строке 32
Строгие стандарты: только переменные должны передаваться по ссылке в C: \ xampp \ htdocs \ directory5.php в строке 34
Ниже приведен фрагмент кода:
else { // the extension is after the last "." $extension = strtolower(array_pop(explode(".", $value))); //Line 32 // the file name is before the last "." $fileName = array_shift(explode(".", $value)); //Line 34 // continue to next item if not one of the desired file types if(!in_array("*", $fileTypes) && !in_array($extension, $fileTypes)) continue; // add the list item $results[] = "<li class=\"file $extension\"><a href=\"".str_replace("\\", "/", $directory)."/$value\">".$displayName($fileName, $extension)."</a></li>\n"; }
Это должно быть ОК
$value = explode(".", $value); $extension = strtolower(array_pop($value)); //Line 32 // the file name is before the last "." $fileName = array_shift($value); //Line 34
array_shift
единственный параметр – массив, переданный по ссылке. Возвращаемое значение explode(".", $value)
не имеет никакой ссылки. Отсюда и ошибка.
Сначала вы должны сохранить возвращаемое значение переменной.
$arr = explode(".", $value); $extension = strtolower(array_pop($arr)); $fileName = array_shift($arr);
От PHP.net
Следующие вещи могут быть переданы по ссылке:
- Variables, ie foo($a) - New statements, ie foo(new foobar()) - [References returned from functions][2]
Никакие другие выражения не должны передаваться по ссылке, так как результат не определен. Например, следующие примеры передачи по ссылке недействительны:
У меня была аналогичная проблема.
Я думаю, проблема заключается в том, что при попытке заключить две или более функции, относящиеся к типу массива, php вернет ошибку.
Скажем, например, этот.
$data = array('key1' => 'Robert', 'key2' => 'Pedro', 'key3' => 'Jose'); // This function returns the last key of an array (in this case it's $data) $lastKey = array_pop(array_keys($data)); // Output is "key3" which is the last array. // But php will return “Strict Standards: Only variables should // be passed by reference” error. // So, In order to solve this one... is that you try to cut // down the process one by one like this. $data1 = array_keys($data); $lastkey = array_pop($data1); echo $lastkey;
Вот так!
Вместо ручного анализа вручную лучше использовать функцию pathinfo :
$path_parts = pathinfo($value); $extension = strtolower($path_parts['extension']); $fileName = $path_parts['filename'];