我正在尝试根据代码获取基于HTML的递归目录列表:
http://webdevel.blogspot.in/2008/06/recursive-directory-listing-php.html
代码运行正常,但它会引发一些错误:
严格标准:只应通过引用传递变量 第34行的C:\ xampp \ htdocs \ directory5.php
严格标准:只应通过引用传递变量 第32行的C:\ xampp \ htdocs \ directory5.php
严格标准:只应通过引用传递变量 第34行的C:\ xampp \ htdocs \ directory5.php
以下是代码摘录:
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";
}
答案 0 :(得分:56)
这应该没问题
$value = explode(".", $value);
$extension = strtolower(array_pop($value)); //Line 32
// the file name is before the last "."
$fileName = array_shift($value); //Line 34
答案 1 :(得分:24)
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]
不应该通过引用传递其他表达式,因为结果是未定义的。例如,以下通过引用传递的示例无效:
答案 2 :(得分:3)
我遇到了类似的问题。
我认为问题在于,当您尝试包含两个或多个处理数组类型变量的函数时,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;
你去吧!
答案 3 :(得分:2)
不是手动解析它,而是最好使用pathinfo函数:
$path_parts = pathinfo($value);
$extension = strtolower($path_parts['extension']);
$fileName = $path_parts['filename'];