PHP file_get_contents 和其他 return 404 但 URL 可通过浏览器访问
PHP file_get_contents and others return 404 but URL is accessible via browser
我正在尝试创建一个 PHP CLI 应用程序,该应用程序抓取 URL 数组,这些数组直接链接到图像,例如:
https://static.wixstatic.com/media/6f6e33_4e2920af05b4440f87880154b5cfcc80~mv2_d_1500_1500_s_2.png
虽然您可以看到 URL 是可公开访问的,但似乎无论我尝试如何恢复它并将其添加到我的本地计算机,我都会得到 404。我已经检查以确保 allow_url_fopen 在我的 php.ini 中设置为 On,我尝试忽略 404 并仍然尝试 return 结果(CURL、file_get_contents),欺骗我的用户-agent 和我已经尝试了 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
我在网上搜索了几个小时,最终放弃了。所以我想我会 post 在这里。有什么建议吗?
提前谢谢大家。
所以我最后做的是使用 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();
}
我从来没有真正弄清楚为什么它会 return 404 到可公开访问的 URL。但那是我想出的解决办法。您可以查看整个文件 here.
我正在尝试创建一个 PHP CLI 应用程序,该应用程序抓取 URL 数组,这些数组直接链接到图像,例如:
https://static.wixstatic.com/media/6f6e33_4e2920af05b4440f87880154b5cfcc80~mv2_d_1500_1500_s_2.png
虽然您可以看到 URL 是可公开访问的,但似乎无论我尝试如何恢复它并将其添加到我的本地计算机,我都会得到 404。我已经检查以确保 allow_url_fopen 在我的 php.ini 中设置为 On,我尝试忽略 404 并仍然尝试 return 结果(CURL、file_get_contents),欺骗我的用户-agent 和我已经尝试了 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
我在网上搜索了几个小时,最终放弃了。所以我想我会 post 在这里。有什么建议吗?
提前谢谢大家。
所以我最后做的是使用 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();
}
我从来没有真正弄清楚为什么它会 return 404 到可公开访问的 URL。但那是我想出的解决办法。您可以查看整个文件 here.