Выполните итерацию по текстовому файлу и проверьте, существует ли файл на сервере

У меня есть текстовый файл с 40 000 путей к файлам с именами файлов, которые мне нужно проверить, если они существуют.

Чтобы проверить наличие одного файла, я использую следующий код:

$filename='/home/httpd/html/domain.com/htdocs/car/002.jpg';
if (file_exists($filename)) {
    echo "The file $filename exists";
} else {
    echo "The file $filename does not exist";
}

Этот код работает.

Теперь я хочу перебрать текстовый файл, который содержит один путь на строку

/home/httpd/html/domain.com/htdocs/car/002.jpg
/home/httpd/html/domain.com/htdocs/car/003.jpg
/home/httpd/html/domain.com/htdocs/car/004.jpg
...

Я пытался перебрать текстовый файл с этим кодом, но я получаю "файл не существует" для всех файлов.

$file = "list.txt";
$parts = new SplFileObject($file);
foreach ($parts as $filename) {
    if (file_exists($filename)) { echo "The file $filename exists"; } 
    else { echo "The file $filename does not exist"; }      
}

2 ответа

Решение

Ваш list.txt Файл имеет новую строку в конце каждой строки. Вы должны сначала обрезать это перед использованием $filename в file_exists() как это например

<?php
$file = "list.txt";
$parts = new SplFileObject($file);
foreach ($parts as $filename) {
    $fn = trim($filename);
    if (file_exists($fn)) {
        echo "The file $fn exists\n";
    } else {
        echo "The file $fn does not exist\n";
    }
}

Когда вы загружаете файл, попробуйте разбить строку на массив с помощью функции explode(). Тогда вы сможете проверить с помощью функции file_exist

Другие вопросы по тегам