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