使用“file_put_contents”上载了一个0字节(空)的图像


Uploaded an image using `file_put_contents` with 0 bytes (empty)?

我使用file_get_contents从URL下载了一个图像,然后使用file_put_contents将其上传到我的网站,该图像显示在指定的目录中,但其大小为零。我已经将此目录和父目录中的权限更改为777,但什么也没发生。

我已经在本地主机中尝试过相同的代码,并且运行得很好。

顺便说一句,我使用的是一个joomla网站和一个名为RSform Pro的组件,它用于创建表单,并提供了一个区域,在将POST数据保存到数据库之前,您可以在其中编辑POST数据。这是代码。

$content = file_get_contents($_POST['image_url']);
$date = date ('d-m-Y_h-m-i');   $random = rand(0,1000);
$name = 'mysite_'.$date.$random.'.png';
$filename = '/home/mysite/images/'.$name;
file_put_contents($filename, $content);

从哪里开始,这个代码有很多错误。。。

  1. 您必须检查file_get_contents的返回值,并确保您的主机允许检索远程数据(在php.ini中,allow_url_fopen设置为On)
  2. 在那之后,其他一切都是非常错误的,并在您的应用程序中留下了一个安全漏洞。存储在$content变量中的结果必须写入一个唯一的临时文件,该文件的唯一正确生成方式是使用tempnam()函数
  3. 在将file_put_contents丢失到tempnam()生成的文件名并检查操作的返回值之后,您必须使用php的fileinfo函数验证该文件是否真的是png图像
  4. 如果上一步成功,则使用rename()将文件移动到永久存储,使用一个不太可能重复的名称。对于$filename = hash('sha256', openssl_random_pseudo_bytes(16)) . 'png'.,然后存储生成的文件名,以便可以使用它来构建应用程序将向用户显示的链接