2012-12-12 61 views
0

我不是一个PHPer,但我正在寻找一个客户非常旧的网站,因为他有一些错误。 这是一个古老的,定制的CMS,要追溯到2007年二月问题与副本()

当试图上传的图像错误:

Warning: copy() [function.copy]: Unable to access in 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

感谢蒂姆。不会为我正确格式化: -/ –

+0

是的,这可能意味着PHP不具有对图像/' –

回答

2

由于您的问题中包含的错误信息是相当隐秘的,即blah/blah/blah,我无法判断它是否适用于上传的文件或目的地。如果错误与目的地有关,则意味着images/目录不能被您的网络服务器(例如Apache)写入。将文件夹的权限更新为可写就足以解决问题。另一方面,如果错误是关于上传的文件,我将不得不同意您的声明,错误可能是是由正在升级的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."; 
} 
+0

您图例的写访问权限。这完全解决了它。 还有另一个脚本可以上传更多的图片,但是使用你的代码我想到了,现在也可以使用。 非常感谢。那需要我花几天时间才能弄清楚。 –