«Строгие стандарты: только переменные должны передаваться по ссылке» error

Я пытаюсь получить рекурсивный список каталогов на основе 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'];