2011-10-09 98 views
2

每当我尝试移动它不工作,并显示“图像文件没有上传” ......我只是想知道哪里出错文件...为什么move_uploaded_file不起作用?

$target = '/var/www/student/public/myimage.jpg'; 
$destination = '/var/www/student/public/images/myimage.jpg'; 

if(move_uploaded_file($target, $destination)) { 
    echo "Image file is successfully loaded";       
} else { 

    echo "Image file not uploaded."; 
} 
  • 我已检查错误日志(tail -f /var/log/apache2/error.log),但什么也没找到。
  • 目标和目的地两个目录都有权限。

有人可以告诉我如何找出错误。任何想法 ?

+4

什么是您正在使用的* actual *代码?您提供的代码显然不起作用,因为* target *必须已经*通过PHP的HTTP POST上传机制上传*。 – animuson

+2

为什么这个标记为zend框架?而你使用的功能是错误的。阅读它的PHP文档(http://php.net/move_uploaded_file)。 – Corbin

+0

文件已被其他脚本上传,我将此文件移动到服务器中的其他文件夹中... – Student

回答

3

那么你可以使用一个文件rename()

rename($target, $destination); 
+0

是的。文件已被其他脚本上传到服务器。我只是在移动它。谢谢 – Student

0

move_uploaded_file()仅适用于http post文件。 http://php.net/manual/en/function.move-uploaded-file.php

到服务器上已经移动一个文件,你将不得不复制文件并取消与旧文件

$target = '/var/www/student/public/myimage.jpg'; 
$destination = '/var/www/student/public/images/myimage.jpg'; 
if (copy($target, $destination)) { 
    unlink($target); 
} else { 
    echo "Unable to copy $target to $destination."; 
} 
+1

甚至还有一个优化版本。它被称为[重命名](http://www.php.net/manual/en/function.rename.php)。 – vstm

+0

-1:要移动文件,可以使用rename()而不是copy()。在大文件上,两者之间有很大的差异。 'rename()'只是修改文件表来指向新的位置; 'copy()'创建一个全新的文件副本。 –

+0

复制是一个有效的选项,因为有时您只有文件读取权限。重命名不能在具有读取权限的文件上工作。除非我有root权限,否则我无法授予文件权限。 –

2

在文件中的当前请求上传?

move_uploaded_file将拒绝移动未上传的文件。 (即$target必须等于$_FILES[$field_name]['tmp_name']

如果已经先前上传,move_uploaded_file会拒绝工作(如果它甚至还在那里 - PHP会删除它,如果你不处理文件上载如果我没有记错)

如果它实际上是已上载到这个请求,你会想如果你不使用HTTP POST上传方法使用rename

+0

它已经被其他脚本上传... – Student

+0

如果它已被上传到另一个页面,它将在您尝试调用此命令时已经被删除,_and_即使它仍然存在,move_uploaded_file也会拒绝工作。你必须处理上传的文件上传的请求,否则PHP会删除它,如果我没有记错的话。 – tobyodavies