文件上传时延迟执行

时间:2013-02-27 10:46:21

标签: php while-loop

我的表单上传了一个文件,该文件将添加到使用PHPMailer创建的邮件中。

不幸的是,邮件没有被发送,我想这可能是因为它的执行过早发送。所以我想要做的是添加一个小循环以有效地暂停进一步执行,直到文件上传:

while (!move_uploaded_file($_FILES['upload'][$first_name.' CV'], $target_path))
{
    sleep(1);

    if (move_uploaded_file($_FILES['upload'][$first_name.' CV'], $target_path))
    {
        echo "The file ".  basename( $_FILES['upload'][$first_name.' CV'])." has been uploaded";
    }
    else
    {
        echo "There was an error uploading the file, please try again!";
    }
}

这是我提出的,但我不确定它在这里做了什么。

请为我澄清以下内容:

  1. !move_uploaded_file...声明在循环开始时上传文件吗?
  2. 如果是,是通过循环每次迭代都上传文件吗?
  3. 循环中move_uploaded_file...语句中的if声明是否也在上传文件,或者只是检查文件是否已上传?
  4. 处理此类事情的最佳方法是什么?我确定这不是......
  5. 提前致谢!

2 个答案:

答案 0 :(得分:0)

在文件上传完成之前,PHP脚本不会执行。你正试图解决错误的问题。

Web服务器处理请求,包括处理和等待上载的文件数据。只有在Web服务器收到完整请求后,它才会调用您的PHP脚本。 (也就是说,除非你使用了一些不寻常的网络服务器。)$_FILES中的任何内容都保证在 现在

答案 1 :(得分:0)

  1. 是的,无论如何它正在移动文件。一旦它移动了文件,我猜它会返回false。
  2. 是的,它试图在每次迭代时移动文件
  3. 这也是试图移动文件。您正在执行不声明它的方法。
  4. move_uploaded_file是同步调用。只需使用下面的代码,如果文件上传成功,它将输入if语句。我猜这是你问题的红鲱鱼
  5. 代码:

    if (move_uploaded_file($_FILES['upload'][$first_name.' CV'], $target_path))
    {
        echo "The file ".  basename( $_FILES['upload'][$first_name.' CV'])." has been uploaded";
    }
    else
    {
        echo "There was an error uploading the file, please try again!";
    }