PHP file_get_contents и другие возвращают 404, но URL доступен через браузер - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь создать приложение PHP CLI, которое очищает массив URL-адресов, которые являются прямыми ссылками на изображение, например:

https://static.wixstatic.com/media/6f6e33_4e2920af05b4440f87880154b5cfcc80~mv2_d_1500_1500_s_2.png

Хотя вы можете видеть, что URL-адрес общедоступен, похоже, что независимо от того, что я пытаюсь восстановить и добавить его на свой локальный компьютер, я получаю 404. Я проверил, чтобы убедиться, что для allow_url_fopen установлено значение On в моем php.ini, я попытался проигнорировать 404 и все еще пытался вернуть результат (CURL, file_get_contents), подделывая мой пользовательский агент, и я попробовал file_get_contents (), copy (), curl и пару других методов и получил тот же результат; 404.

Вот как выглядят эти функции:

Функция, которая берет массив путей к файлам и передает его для загрузки функции.

     /**
     * @param array $locations
     * Downloads images at the specified locations into the directory specified in the constructor. 
     */
    public function scrapeImages($locations){
        echo "Attempting to download images from given source data. Standby... \n";
        foreach($locations as $location){
            echo "Scraping: ".$location;
            $fname = basename($location);
            //$this->downloadFile($location, $this->formatDirectory($this->dir).$fname);
            file_put_contents($this->formatDirectory($this->dir).$fname,$this->downloadFile($location));
        }
    }

Функция, которая фактически выполняет загрузку.

     /**
     * @param string $path 
     * Checks to see if a file exists and is readable then if it is, downloads it. 
     */
    public function downloadFile($path){
        if(!file_exists($path)){
            echo "File does not exist! \n";
        }
        if(!is_readable($path)){
            echo "File is not readable! \n";
        };
        return file_get_contents(trim($path));
    }

Вся кодовая база этого может быть найдена здесь, если вам нужно проанализировать дальше - https://github.com/ErvinSabic/SabicRipper

Я провел несколько часов в Интернете и в конце концов сдался. Так что я решил опубликовать здесь. Есть предложения?

Заранее спасибо, ребята.

1 Ответ

0 голосов
/ 25 июля 2018

Итак, в итоге я использовал wget, так как большинство других методов не работало. Ниже приведена рабочая функция.

     /**
     * @param string $path 
     * Checks to see if a file exists and is readable then if it is, downloads it. 
     */
    public function downloadFile($path){
        echo "Grabbing File:" .$path."\n";
        shell_exec("wget -P".$this->getDirectory()." ".$path);
        //echo "Attempting to place ".basename($path)." in ".$this->getDirectory();
    }

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

...