0

我有一个 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

4 回答 4

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

foreach如果您提供非数组变量,将无法执行(并且应该对您大喊大叫)。因此,由于 2.jpeg 不存在,glob() 将返回 NULL 使 foreach 不执行。但是,您$currentfile在一个foreach永远不会执行的范围内进行分配,因此$currentfile将保留其旧值“1.jpeg”。

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

高温高压

于 2010-07-05T16:35:59.743 回答
0

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

于 2010-07-05T14:22:56.573 回答
0

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

之间没有区别

<?php 

$MyValue = 'Value';

?>
<?php
 echo $MyValue;
?>

<?php 

$MyValue = 'Value';
echo $MyValue;

?>
于 2010-07-05T16:41:22.900 回答