我不是一个PHPer,但我正在寻找一个客户非常旧的网站,因为他遇到了一些错误。 这是一个古老的,定制的CMS,可追溯到2007年2月。
尝试上传图片时出错:
警告:copy()[function.copy]:无法访问blah / blah / blah
这是相关代码的一部分:
$path= "images/".$new_file_name;
if($ufile !=none)
{
if(copy($HTTP_POST_FILES['ufile']['tmp_name'], $path))
{
echo "<h1>uploading...</h1>";
$img_name = $_POST['name'];
mysql_query("UPDATE properties SET img_main='$Xnew_file_name_small',img_main_name='$img_name' WHERE ref='$ref'");
$small_image=imagecreatefromjpeg('images/'.$new_file_name);
imagejpeg($small_image, 'images/'.$new_file_name_small, 50);
unlink('images/'.$new_file_name);
echo("<meta http-equiv='refresh' content='0;URL=upload_scipt_main_2.php?ref=". $ref."&img=".$new_file_name_small." '/>");
}
else
{
echo "Error";
}
}
我想知道的是,这是否意味着复制功能没有对其尝试写入的路径的写访问权。 此外,由于该网站已经很老了,这个错误可能是由升级的PHP版本引起的吗? 现在是5.3.14。
我意识到这可能是在黑暗中拍摄的,并且可能有很多原因导致它无法正常工作并且发布的代码不是很有帮助,但任何指导都非常有用
答案 0 :(得分:2)
由于您的问题中包含的错误消息相当含糊,即blah/blah/blah
,我无法判断它是否适用于上传的文件或目的地。如果错误与目标有关,则表示您的Web服务器(例如Apache)无法写入images/
目录。将文件夹的权限更新为可写可能足以解决问题。
另一方面,如果错误与上传的文件有关,我将不得不同意您的声明可能是由正在升级的PHP版本引起的。
根据文档,$HTTP_POST_FILES
已被弃用一段时间,以支持新的(ish)$_FILES
。
在同一主题上,您似乎正在使用此代码基本上“上传文件”。考虑到这一点,您不希望使用copy()
,而是使用move_uploaded_file()
。
所以,而不是像这样的一行:
copy($HTTP_POST_FILES['ufile']['tmp_name'], $path)
你想尝试:
move_uploaded_file($_FILES['ufile']['tmp_name'], $path)
虽然您可以在其他地方使用它,但您还应该验证该文件是否已上传;你可以用is_uploaded_file()
实现这一目标。结合上述内容和您的示例代码,以下内容应该是您的目标:
if(is_uploaded_file($_FILES['ufile']['tmp_name'])) {
$path= "images/".$new_file_name;
if(move_uploaded_file($_FILES['ufile']['tmp_name'], $path)) {
echo "<h1>uploading...</h1>";
$img_name = $_POST['name'];
mysql_query("UPDATE properties SET img_main='$Xnew_file_name_small',img_main_name='$img_name' WHERE ref='$ref'");
$small_image=imagecreatefromjpeg('images/'.$new_file_name);
imagejpeg($small_image, 'images/'.$new_file_name_small, 50);
unlink('images/'.$new_file_name);
echo("<meta http-equiv='refresh' content='0;URL=upload_scipt_main_2.php?ref=". $ref."&img=".$new_file_name_small." '/>");
} else {
echo "Error: The file could not be moved.";
}
} else {
echo "Error: The file could not be uploaded.";
}