在处理页面时,不会重写变量

时间:2010-07-05 14:03:15

标签: php variables foreach file-exists

我有一个php脚本,用于检查特定文件是否存在。该文件的名称由'compartment'变量定义。当脚本被复制并再次粘贴到一个单独的块中时,只更改它运行的隔离变量...

比如说1.jpeg存在,但2.jpeg不存在。第一个块显示指向此文件的链接,但第二个块显示上传表单时也是如此,因为2.jpeg不存在。

好像$ currentfile或$ filename变量被转移到它们下面的块中。

请在下面找一个我的问题的例子......

<?php
    $compartment = "1";

    foreach (glob("$compartment.*") as $filename) {
    $currentfile = "$filename";
    }

    if (file_exists($currentfile)) {
            echo "
            /* If the file exists, it will display a link to the file. */
            <a href='$currentfile' target='_blank'>LAUNCH PREVIEW</a>
            ";
    } else {
        echo "
            /* Here is an uploader form that would transform foobar.jpeg into $compartment.jpeg. */
            ";
        }
?>


<?php
    $compartment = "2";

    foreach (glob("$compartment.*") as $filename) {
    $currentfile = "$filename";
    }

    if (file_exists($currentfile)) {
            echo "
            /* If the file exists, it will display a link to the file. */
            <a href='$currentfile' target='_blank'>LAUNCH PREVIEW</a>
            ";
    } else {
        echo "
            /* Here is an uploader form that would transform foobar.jpeg into $compartment.jpeg. */
            ";
        }
?>

谢谢。

4 个答案:

答案 0 :(得分:1)

  • 也许你的file_exists()必须在foreach中,否则$ currentfile总是在目录中找到的最后一个文件。
  • $ filename不包含路径变量
  • 你的逻辑对我来说似乎有点奇怪。你遍历一个目录并检查文件中的每个文件是否存在file_exists。因为没有其他检查(例如针对预先填充的数组),所以它将始终返回true。

答案 1 :(得分:1)

如果提供非数组变量,

foreach将无法执行(并且应该对你大喊大叫)。 因此,由于2.jpeg不存在,glob()将返回NULL,使foreach不执行。但是,您要在$currentfile中分配永不执行的foreach,以便$currentfile保留旧值“1.jpeg”。

这可能看起来相反的原因($compartment = 1)是因为$currentfile在第一次使用时使用垃圾if(file_exists($currentfile))进行初始化。这当然评估为false,因此执行跳转到else部分。

HTH

答案 2 :(得分:0)

将整个if / else块放在foreach中,并用file_exists($ filename)替换file_exists($ currentfile);

答案 3 :(得分:0)

.php文件中的单独部分是同一命名空间/块/执行的一部分。如果您在第一部分中使用变量,它仍将被定义,并且在第二部分中仍然具有相同的值。

之间没有区别
<?php 

$MyValue = 'Value';

?>
<?php
 echo $MyValue;
?>

<?php 

$MyValue = 'Value';
echo $MyValue;

?>