我在许多论坛中读到在变量中列出的任何$之前删除&符号(&),我这样做了,但这样做会删除我正在使用的代码的功能。我该怎么办?
演示here。
代码在这里:
<?php
$val = $_GET['name'];
$path = "./images/".$val."/";
$file_array = array ();
readThisDir ( $path, &$file_array );
echo '<div class="gallery" style="display:block;" id="'.$val.'">';
echo '<ul>';
foreach ( $file_array as $file )
{
if (strstr($file, "png")||strstr($file, "jpg")||strstr($file, "bmp")||strstr($file, "gif"))
{
list($width, $height) = getimagesize($file);
$info = exif_read_data($file);
echo '<li><a href="javascript:void(0);"><img src="'.$file.'" width="'.$width.'" height="'.$height.'" alt="'.$file.'"/></a><span>'.$info['Title'].'<div class="gallerynav"><a href="javascript:void(0);" class="prevproject">«</a><a href="javascript:void(0);" class="nextproject">»</a></div></span></li>';
}
}
echo '</ul>';
echo '</div>';
function readThisDir ( $path, $arr )
{
if ($handle = opendir($path))
{
while (false !== ($file = readdir($handle)))
{
if ($file != "." && $file != "..")
{
if (is_dir ( $path."/".$file ))
{
readThisDir ($path."/".$file, &$arr);
} else {
$arr[] = $path."/".$file;
}
}
}
closedir($handle);
}
}
?>
答案 0 :(得分:7)
你应该在函数声明中标记pass-by-reference,而不是调用函数的位置。
...
function readThisDir ( $path, &$arr )
{ ...
答案 1 :(得分:3)
更改
function readThisDir ( $path, $arr )
要
function readThisDir ( $path, &$arr )
和
readThisDir ($path."/".$file, &$arr);
要
readThisDir ($path."/".$file, $arr);
PHP不希望您将变量的地址直接传递给函数。
答案 2 :(得分:2)
它不会直接回答您的问题,但您可以使用RecursiveDirectoryIterator
替换所有代码(假设为5.2+):
$it = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path);
);
$files = array();
foreach ($it as $file) {
$files[] = $file->getPathname();
}
答案 3 :(得分:0)
使函数readThisDir返回一个填充了文件信息的数组,并将其分配给$ file_array变量。 类似的东西:
$file_array = readThisDir ($path);
function readThisDir ( $path)
{
$arr = array ();
if ($handle = opendir($path))
{
while (false !== ($file = readdir($handle)))
{
if ($file != "." && $file != "..")
{
if (is_dir ( $path."/".$file ))
{
readThisDir ($path."/".$file, &$arr);
} else {
$arr[] = $path."/".$file;
}
}
}
closedir($handle);
}
return $arr;
}