2012-08-16 48 views
2

我似乎无法弄清楚为什么会发生这种情况。当我运行以下代码:PHP文件既不移动也不移动

$uref = APACHE_ROOT . UPLOAD_PATH . $applicant . "_ref_{$email}_{$year}"; 

if (!move_uploaded_file($_FILES['file']['tmp_name'], $uref)) { 
    echo "Move failed"; 
} elseif (move_uploaded_file($_FILES['ref']['tmp_name'], $uref))  { 
    echo "Move succeeded"; 
} 

这两个语句都不会返回。两条路径都存在;一个文件已成功上传,并且仅在第二次上传尝试后才开始。

任何想法,为什么? 感谢您的任何建议。

回答

4
if (!move_uploaded_file($_FILES['file']['tmp_name'], $uref)) { 
    echo "Move failed"; 
} elseif (move_uploaded_file($_FILES['ref']['tmp_name'], $uref))  { 
    echo "Move succeeded"; 
} 

如果您的第一次调用返回true,因为该文件被移动,则第二个将返回false,因为该文件不再存在。

只需要简单的if/else即可,第一次调用可以是真或假,所以您不需要重新检查。

1

首先,是$uref = APACHE_ROOT . UPLOAD_PATH . $applicant . "_ref_{$email}_{$year}";一个目录?

如果是这样,那么您正试图写入一个目录,如果该目录已经存在,该目录可能会失败。

此外,只检查一次运行。

第一次,move_file_uploaded将被执行以检查其是否定的。这显然是真的,所以它到第二个检查是否是真的,它返回false。

而是执行此操作:

$uref = APACHE_ROOT . UPLOAD_PATH . $applicant . "_ref_{$email}_{$year}"; 

if(move_uploaded_file($_FILES['file']['tmp_name'], $uref)){ 
    echo "Move succeeded"; 
} else { 
    echo "Move failed"; 
}