Ответ 1
Это должно быть ОК
$value = explode(".", $value);
$extension = strtolower(array_pop($value)); //Line 32
// the file name is before the last "."
$fileName = array_shift($value); //Line 34
Я пытаюсь получить рекурсивный список каталогов на основе 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, i.e. foo($a)
- New statements, i.e. foo(new foobar())
- [References returned from functions][2]
Никакие другие выражения не должны передаваться по ссылке, так как результат undefined. Например, следующие примеры передачи по ссылке недействительны:
У меня была аналогичная проблема.
Я думаю, проблема заключается в том, что при попытке заключить две или более функции, относящиеся к типу массива, php вернет ошибку.
Скажем, например, этот.
$data = array('key1' => 'Robert', 'key2' => 'Pedro', 'key3' => 'Jose');
// This function returns the last key of an array (in this case it $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'];