2013-02-27 65 views
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. 是否在if语句中的move_uploaded_file...声明中还声明了上载文件还是只检查文件是否已上传?
  4. 处理这类事情的最佳方式是什么?我敢肯定这不是它...

在此先感谢!

回答

0

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

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

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!"; 
} 
+0

您在红鲱鱼问题失去我了,但幸运的是我还没有应用,同时还循环。我目前所有的是if语句,但它似乎没有上传文件(服务器中的文件夹是空的)... – Ortund 2013-02-27 10:53:44

+0

我的意思是这可能不是为什么你的邮件不被发送! – cowls 2013-02-27 10:55:10

+0

啊......这让我想知道还有什么可以的:/ – Ortund 2013-02-27 10:56:26