将图像从URL复制到Web服务器文件系统

时间:2013-05-04 17:20:06

标签: php

尝试构建一个表单,通过url上传图像并将其从那里复制到我的服务器。

搜索以下主题:

我试过这个:

$pic = Submitted image URL
$pic = Submitted image name . ".jpg"

copy($pic, $_SERVER['DOCUMENT_ROOT'] . '/mydir/' . $picname);

结果:

  

警告:copy(mydir / mypic.jpg)[function.copy]:无法打开流:第42行/home/user/public_html/mysite.ca/upload.php中没有此类文件或目录

此:

$fp = fopen($_SERVER['DOCUMENT_ROOT'] . '/mydir/' . $picname, "w");
fwrite($fp, $pic);
fclose($fp);

结果:

  

警告:fwrite()要求参数1为资源,第47行/home/user/public_html/mysite.ca/upload.php中给出布尔值

     

警告:fclose()要求参数1为资源,第48行/home/user/public_html/mysite.ca/upload.php中给出布尔值

目录权限是777,它们在服务器上的任何位置都没有个人信息。任何日志都没有错误,我不确定如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

只有在您的服务器启用了allow_url_fopen选项时,才能直接打开文件等网址。

fopen()失败并返回FALSE,但您没有检查。您的文件名或目录权限有问题。

答案 1 :(得分:0)

$fp = fopen($_SERVER['DOCUMENT_ROOT'] . '/mydir/' . $picname, "w");这似乎有问题。 这样做分为两部分,例如$path = $_SERVER['DOCUMENT_ROOT'] . '/mydir/'.$picname; $fp = fopen($path, "w");。现在你可以echo $path看看它是否正确?如果仍有问题,请尝试使用相对路径,例如$path = "./mydir/$picname"; echo $path;,然后直接转到该文件夹​​以检查文件夹是否存在。

答案 2 :(得分:0)

  

警告:copy(mydir / mypic.jpg)[function.copy]:无法打开流:第42行/home/user/public_html/mysite.ca/upload.php中没有此类文件或目录

这听起来像您尝试复制文件的目标路径是错误的。

您是否检查了路径实际包含的内容?

var_dump($_SERVER['DOCUMENT_ROOT'] . '/mydir/' . $picname);

除了当前的错误之外,如果您接受客户端发送的任何路径/文件名信息,您正在服务器中泄漏巨大的安全漏洞在没有任何进一步控制/限制的情况下保存图像。