@xenonhammer

Как php повторно узнает о файлах в каталоге: из памяти или читает все занова?

Здравствуйте. Написал скрипт, который грабит картинки, с конкретного сайта. проблема в обновлении контента.
PHP при обращается к каждому url, будто, не обращает внимания на if( !name ). Возник вопрос, Данные по файлам в каталоге, находятся в буфере или php каждый раз читает имена всех файлов каталога? Я никакие манипуляции буфером не делал.
foreach ($data as $k){
				foreach ($k as $kq => $v){
					foreach(($v["photo_list"]) as $key => $url){
						$name = (basename($url));
						$path = "/" . $name ;

						$ch = curl_init($url);
						curl_setopt($ch, CURLOPT_HTTPHEADER, 0);
						curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
						$data = curl_exec($ch);
						curl_close($ch);
						
						if(!file_exists($name)){
							$file = fopen($path, "w+");
							fwrite($file, $data);
							fclose($file);
						}


					}
						

				}
			}
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
1. путь до файла (куда пишете) у вас в $path, а вы проверяете $name, что не верно
2. проверку на существование делаете после curl, а значит даже если в файл не пишете, то всё-равно делаете http запрос что не имеет смысла

Подправленный вариант
<?php
foreach($data as $k)
{
    foreach($k as $kq => $v)
    {
        foreach(($v["photo_list"]) as $key => $url)
        {
            $name = (basename($url));
            $path = "/".$name;
            
            //если файл существует идём к следующему $url
            if(file_exists($path))
            {                
                continue;
            }

            //скачиваем
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_HTTPHEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $data = curl_exec($ch);
            curl_close($ch);
            
            //записываем
            $file = fopen($path, "w+");
            fwrite($file, $data);
            fclose($file);
        }
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы