1

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

搜索以下线程:

我试过这个:

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

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

结果是:

警告:复制(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,它们在服务器上的任何地方都没有个人信息。任何日志中都没有错误,我不确定如何解决这个问题?

4

3 回答 3

1

allow_url_fopen仅当您的服务器启用了该选项时,直接打开文件等 URL 才有效。

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

于 2013-05-04T17:44:16.597 回答
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;它并直接转到该文件夹​​以检查该文件夹是否存在。

于 2013-05-04T17:27:39.100 回答
0

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

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

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

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

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

于 2013-05-04T17:31:20.110 回答