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

问题描述:

尝试构建一个表单,通过url上传图像并从那里复制到我的服务器。从URL复制图像到Web服务器文件系统

搜索follwoing线程:

我已经试过这样:

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

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

结果在:

警告:复制(MYDIR/mypic.jpg)[function.copy]:未能打开流:在/home/user/public_html/mysite.ca/upload.php没有这样的文件或目录第42行

此:

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

结果:

警告:fwrite的()预计参数1是资源,博olean在/home/user/public_html/mysite.ca/upload.php在线47

警告:fclose()期望参数1是资源,布尔在/home/user/public_html/mysite.ca/中给出在线48上传.php

目录权限是777,它们在服务器上的任何地方都没有个人信息。在任何日志中都没有错误,我不知道如何解决此问题?

$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;它并直接转到该文件夹​​以检查文件夹是否存在。

警告:复制(MYDIR/mypic.jpg)[function.copy]:未能打开流:在/home/user/public_html/mysite.ca/upload.php没有这样的文件或目录第42行

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

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

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

除了当前的错误,你,如果你接受任何路径/文件名信息的客户端发送来构建名称保存图像抓取您的服务器一个巨大的安全漏洞没有任何进一步的控制/限制。

+0

目录名称是在公共目录之外定义的常量,只是更容易用这种方式描述。此表格仅供我用来上传大量图片。 – HandsomeRob 2013-05-04 17:41:47

+0

var_dump()字符串(79)“/home/user/public_html/mysite.ca/mydir/mypic.jpg” – HandsomeRob 2013-05-04 17:51:04

+0

而您正在运行脚本的同一文件夹中的'mydir'文件夹已存在...?如果没有,您必须先创建它('mkdir'),然后才能将文件复制到它中! – CBroe 2013-05-04 18:30:29

只有当您的服务器启用allow_url_fopen选项时,才能直接打开文件类似URL的URL。

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

+0

如果在localhost上工作,这将在php.ini?在网上的cPanel上找不到对它的任何引用,管理员可以做些什么? – HandsomeRob 2013-05-04 17:57:36

+0

'allow_url_fopen = off'会在使用'copy'时产生不同的错误信息,但... – CBroe 2013-05-04 18:29:19