Переменные не переписываются при обработке страницы - PullRequest
0 голосов
/ 05 июля 2010

У меня есть скрипт php, который проверяет, существует ли конкретный файл. Это имя файла определяется переменной «купе». Когда скрипт копируется и снова вставляется в отдельный блок, изменяя только переменную компартмента, возникает проблема ...

Скажем, например, 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 ]

1 голос
/ 05 июля 2010

foreach не выполнится (и должен кричать на вас), если вы предоставите переменную, не являющуюся массивом. Поэтому, поскольку 2.jpeg не существует, glob () вернет NULL, что делает foreach не выполненным. Однако вы присваиваете $currentfile внутри foreach, который никогда не выполняется, поэтому $currentfile сохранит свое старое значение "1.jpeg".

Причина, по которой это может работать наоборот (когда $compartment = 1), заключается в том, что $currentfile инициализируется с мусором при первом использовании, который находится в if(file_exists($currentfile)). Это, конечно, оценивается как ложное, поэтому выполнение переходит к другой части.

НТН

1 голос
/ 05 июля 2010
  • Возможно, ваш file_exists () должен быть внутри foreach, иначе $ currentfile всегда будет последним файлом, найденным в каталоге.
  • $ filename не содержит переменную пути
  • Вашлогика кажется немного странной для меня.Вы перебираете каталог и проверяете каждый файл внутри, существует ли file_exist или нет.Поскольку никакой другой проверки (например, для предварительно заполненного массива) не происходит, всегда будет возвращаться значение true.
0 голосов
/ 05 июля 2010

Отдельные разделы в файле .php являются частью одного и того же пространства имен / блока / выполнения.Если вы используете переменную в первом разделе, она все равно будет определена и будет иметь то же значение во втором разделе.

Нет разницы между

<?php 

$MyValue = 'Value';

?>
<?php
 echo $MyValue;
?>

и

<?php 

$MyValue = 'Value';
echo $MyValue;

?>
0 голосов
/ 05 июля 2010

поместите весь блок if / else внутри foreach и замените file_exists ($ currentfile) на file_exists ($ filename);

...