0

特定のファイルが存在するかどうかを確認するphpスクリプトがあります。このファイル名は、「コンパートメント」変数によって定義されます。スクリプトをコピーして別のブロックに再度貼り付けると、コンパートメント変数のみを変更すると問題が発生します...

たとえば、1.jpegは存在しますが、2.jpegは存在しません。最初のブロックにはこのファイルへのリンクが表示されますが、2.jpegが存在しないため、アップロードフォームを表示する必要がある場合は2番目のブロックにも表示されます。

これは、$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にパス変数が含まれていません
  • あなたの論理は私には少し奇妙に思えます。dirを繰り返し処理し、file_existsかどうかに関係なく、内部のすべてのファイルをチェックします。他のチェック(たとえば、事前入力された配列に対する)は行われないため、これは常にtrueを返します。
于 2010-07-05T14:05:53.510 に答える
1

foreach配列以外の変数を指定すると、実行に失敗します (そして怒鳴られるはずです)。したがって、2.jpeg が存在しないため、glob() は NULL を返し、foreach は実行されません。ただし、決して実行されない$currentfile内で割り当てているため、古い値「1.jpeg」が保持されます。foreach$currentfile

これが逆に動作するように見える理由 ( の場合$compartment = 1) は、$currentfileが最初の使用時にガベージで初期化されるためですif(file_exists($currentfile))。これはもちろん false と評価されるため、実行は else 部分にジャンプします。

HTH

于 2010-07-05T16:35:59.743 に答える
0

.phpファイルの個別のセクションは、同じ名前空間/ブロック/実行の一部です。最初のセクションで変数を使用する場合、それは引き続き定義され、2番目のセクションでも同じ値を持ちます。

違いはありません

<?php 

$MyValue = 'Value';

?>
<?php
 echo $MyValue;
?>

<?php 

$MyValue = 'Value';
echo $MyValue;

?>
于 2010-07-05T16:41:22.900 に答える
0

if/else ブロック全体を foreach 内に配置し、file_exists($currentfile) を file_exists($filename) に置き換えます。

于 2010-07-05T14:22:56.573 に答える