PHP, если файл существует, не работает - PullRequest
2 голосов
/ 04 ноября 2011

Я использую простой сценарий, который отображает изображения в виде слайд-шоу jquery - эти имена файлов изображений перечислены в файле .txt и меняются в зависимости от страницы, на которой вы находитесь (я также использую пагинацию в другом сценарии).

Если имя файла, указанного в файле .txt, не существует, я бы хотел, чтобы вместо него отображалось изображение unavailable.jpg ...

Оригинальный скрипт:

<?php
echo"
<div id='slider-wrapper'><div id='slider' class='nivoSlider'>";
$photos=file("photos.txt");
foreach($photos as $image){
$item=explode("|",$image);
if($item[0]==$fields[0]){
$photo=trim($item[1]);
echo"<img src='images/work/$photo' alt='' />\n";
}
}
echo"
</div>
</div>
"?>

И вот моя попытка ... но это не работает должным образом - вместо отображаемого изображения 'unavailable.jpg', оно показывает все изображения в каталоге ...: S У любого есть идеи о том, что я могу делать неправильно? : S

<?php
echo"
<div id='slider-wrapper'><div id='slider' class='nivoSlider'>";
$photos=file("photos.txt");
foreach($photos as $image){
$item=explode("|",$image);
$photo=trim($item[1]);
if (file_exists("images/work/".$photo)) {
echo"<img src='images/work/$photo' alt='' />\n";
}
else{
echo"<img src='images/work/unavailable.jpg' alt='' />\n";
}
}
echo"
</div>
</div>
"?>

Вместо всех отображаемых изображений я хочу, чтобы отображались только изображения для этой страницы. Вот пример моего текстового файла:

1|image1.jpg
1|image2.jpg
1|image3.jpg
2|image1.jpg
2|image2.jpg

1 и 2 предназначены для страниц 1 и 2, и они отображают перечисленные изображения. Все это прекрасно работает в вышеприведенном исходном скрипте, который я опубликовал, но, кажется, он ломается, когда я добавляю if file_exists.

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

Путь к вашим изображениям использует относительный путь.Вы уверены, что текущий рабочий каталог - это каталог, который вы считаете?

Чтобы проверить, выполните ли echo 'Current Working Directory: '.getcwd()."<br />\n" и проверьте, в каком каталоге вы находитесь.

Вероятно, лучше использовать полный файлпуть к каталогу вашего изображения, чтобы скрипт мог быть размещен в любом месте на вашем сервере.

Теперь, если это правильно, вам нужно проверить, есть ли у вашего скрипта разрешение на ваш каталог изображений.Обычно php запускается как nobody:nobody или apache:apache в зависимости от вашей конфигурации.

Каталоги выше, а также файлы должны иметь 644 (-rw-r - r--) или как минимум444 разрешение (-r - r - r -).

Попробуйте эти две вещи и дайте нам знать, решило ли это вашу конкретную проблему или нет;Я надеюсь, что это так.

0 голосов
/ 04 ноября 2011

Вам необходимо повторно добавить тест для $ item [0] == $ fields [0]:

<?php
    echo "<div id='slider-wrapper'><div id='slider' class='nivoSlider'>";
    $photos = file("photos.txt");
    foreach ($photos as $image) {
        $item = explode("|",$image);
        $photo = trim($item[1]);
        if (file_exists("images/work/".$photo)
            && $item[0] == $fields[0]
        ) {
            echo "<img src='images/work/$photo' alt='' />\n";
        } else {
            echo "<img src='images/work/unavailable.jpg' alt='' />\n";
        }
    }

    echo "</div></div>";
?>

Редактировать: я только что заметил, что Отт уже указывал на это в комментариях.У вас все еще есть проблема с unavailable.jpg?

...