【问题标题】:PHP file neither moved nor unmovedPHP文件既没有移动也没有移动
【发布时间】:2012-08-13 05:55:52
【问题描述】:

我似乎无法弄清楚为什么会这样。当我运行以下代码时:

$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";
}

两个语句都没有返回。两条路径都存在;一个文件已成功上传,并且仅在第二次上传尝试后就开始发生这种情况。

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

【问题讨论】:

    标签: php file upload move


    【解决方案1】:

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

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

    另外,只检查一次运行。

    第一次,move_file_uploaded会被执行,检查是否为负。明明是真的,所以去第二个检查是不是真的,返回的是假的。

    改为这样做:

    $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";
    }
    

    【讨论】:

      【解决方案2】:
      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 - 第一次调用可以是真或假,所以你不需要重新检查。

      【讨论】:

        猜你喜欢
        • 2015-05-08
        • 2014-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-23
        相关资源
        最近更新 更多