如果我的网站在大约30分钟内没有任何活动,PHP fsockopen页面将超时,并显示空白页面无错误消息..尝试了所有错



我有一个托管在IIS 8.0上的Web应用程序/网站。该网站使用PHP 5.3编写,并使用PHP的odbc_connect()函数从与数据库的连接中获取数据。

在我网站上的两个页面上,必须向用户发送电子邮件,让他或她激活论坛帖子。我目前正在使用一种自制的SMTP方法,该方法使用fsockopen()发送电子邮件。

问题如下:

如果≈30分钟后,用户没有访问该网站,而他们访问了发送电子邮件的页面,则根据PHP的max_execution_time值,该页面将完全超时,没有数据发送到用户的浏览器(用户看到一个空白页面)。

尽管如此电子邮件仍在发送,并且该页面上的每一位代码都在执行我怎么知道?我创建了一个日志文件,它在可疑页面的最后被写入,并且它总是被写入,即使页面超时。如果用户退出空白页面,再次提交电子邮件,它就会神奇地工作!

我尝试过的事情,没有改变一件事:

  1. 尝试使用PHP PEAR邮件
  2. 尝试使用PHPMailer
  3. 尝试使用PHP Swift Mailer
  4. 尝试使用flush()
  5. 尝试使用ob_flush()
  6. 尝试增加PHP的max_execution_time(这只会延长超时时间)
  7. 尝试使用stream_set_blocking()在fsockopen上使用非阻塞模式
  8. 尝试使用PHP 5.4/5.3/5.2
  9. 尝试设置error_reporting(E_ALL)
  10. 尝试设置ini_set("display_errors",1)
  11. 尝试设置ini_set("display_startup_errors",1)

空闲30分钟后,我得到的只是一个空白屏幕,没有错误消息。

有人有什么想法吗?记住,页面上的所有代码都会被执行,但它似乎从未停止"处理",直到超时。

示例代码:

<?php
include("functions.php"); //contains "smtp_mail" and "logwrite" functions
odbc_connect($connectionstring,$username,$password);
$mail = smtp_mail($recipient, $subject, $message);
echo "made it here"; //this never makes it to the user's browser!
logwrite("made it here"); //this is always executed, but still times out!
?>

事实证明,问题存在于我的主机端。我更换了主机,上面发布的代码运行良好。

相关内容

  • 没有找到相关文章

最新更新