首页 > 解决方案 > WPRobot 无法从 IIS 服务器复制图像

问题描述

我正在尝试使用我自己的服务器测试针对我自己的网站的抓取设置,但是当我这样做时,我从 WPRobot 收到错误消息“错误:插入帖子失败。无法在“/home/myapp/public_html/”中创建附件文件wp-content/uploads/2021/03/162153879_434009211024473_384527521975744737_n.jpg“请设置正确的权限。” 如果源不允许其他站点使用 curl 请求复制其内容,我通常会收到此通知。为了解决这个问题,我设置了一个 Puppeteer 脚本,通过在源网站(在本例中为 Instagram)上截取图像文件的屏幕截图来充当代理,但现在我在尝试从我自己的 IIS 服务器下载屏幕截图时遇到了同样的错误。

我没有向我的服务器添加任何内容,旨在防止任何人从中卷曲图像文件。事实上,最近有几个站点托管在同一台服务器上。WPRobot 从那些下载任何图像从来没有问题。除了在删除旧网站后将 Node.js 应用程序上传到默认网站目录之外,我没有进行任何更改,以便在我的主机帐户在几天内暂停之前使用此服务器测试应用程序。

什么会导致无法通过默认网站上的 curl 访问 IIS 10 服务器上的图像?这是 WPRobot 声称未设置正确权限的示例图像http://85.17.219.113/images/2021/3/505648a2-3404-c3e6-618f0fa50fd3.jpg?这可能是由于使用 IP 地址而不是域名造成的吗?文件名的长度可能是个问题吗?

另外:图像大小只有 92kb。我提到这一点是因为我在尝试下载大文件时遇到了 WPRobot 显示相同错误的问题,但是这个文件远不足以触发它。

更新:这似乎是 PHP 中的 file_get_contents 和/或 file_put_contents 的问题,而不是 curl。例如,以下会导致错误:

$page = file_get_contents('http://85.17.219.113/images/2021/3/505648a2-3404-c3e6-618f0fa50fd3.jpg');
try{
    file_put_contents('test.jpg', file_get_contents($page));
    echo 'file downloaded';
}catch(Exception $e) {
    echo 'Message: ' .$e->getMessage();
}

该代码不会创建文件,也不会回显错误消息,但是当我打开错误报告时,我得到了这个:

Fatal error: Uncaught ValueError: file_get_contents(): Argument #1 ($filename) must not contain any null bytes in C:\xampp\apps\wordpress\htdocs\sources\test.php:16 Stack trace: #0 C:\xampp\apps\wordpress\htdocs\sources\test.php(16): file_get_contents('\xFF\xD8\xFF\xE0\x00\x10JFIF\x00\x01\x01\x00\x00...') #1 {main} thrown in C:\xampp\apps\wordpress\htdocs\sources\test.php on line 16

我无法解释这个错误。该 URL 如何转换为具有空字节的文件名?

这可以很好地下载图像:

$url = 'http://85.17.219.113/images/2021/3/505648a2-3404-c3e6-618f0fa50fd3.jpg';

// Image path
$img = 'test.jpg';

// Save image
$ch = curl_init($url);
$fp = fopen($img, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);

现在我需要在 WPRobot 中找到用于缓存图像并将它们保存到文件系统的函数。有谁知道该功能在 WPRobot 中的位置?很高兴知道该插件如何保存图像。

标签: phpwordpressweb-scrapingiis

解决方案


问题原来是 WPRobot 本身没有更新新的提要 URL。结果,它仍在尝试使用包含原始 Instagram 图像文件 URL 的那个。通常这个错误不会花很长时间来检测。通常,当我加载广告系列选项时,如果更新不起作用,它会显示旧 URL,您所要做的就是继续粘贴新 URL 并点击更新按钮,直到它最终起作用。我已经这样做了好几次,重新加载页面在文本区域中显示了新的 URL,但由于某种原因,我在一个小时后加载了页面并且旧的页面出现了。

这确实是 WPRobot 中的一个可怕错误。当您必须更改 10-20 个广告系列中的 URL 时,可能需要一个小时才能完成,因为您必须一遍又一遍地这样做,直到它最终起作用。


推荐阅读