0

我的表单上传了一个文件以添加到使用 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. 处理这种事情的最佳方法是什么?我确定这不是...

提前致谢!

4

2 回答 2

0

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

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

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

代码:

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!";
}
于 2013-02-27T10:49:42.287 回答