求教 fsockopen  并发。
我想发邮件  不知道 fsockopen  这个怎么并发邮件

解决方案 »

  1.   

    phpmailer,求楼主别再执迷不悟。
      

  2.   

    fsockopen  的确可以并发  只是现在我这里的代码  我没看懂 怎么并发  所以到这来问问
      

  3.   

    你可以ajax循环执行发送邮件,也可以用下面两个方法(西面代码是大致思路):if (isset($_GET['act']) && $_GET['act'] == 'sendMail') {
        sendEmail();// 发送邮件操作
    }function fSockGet($url, $timeout = 3)
    {
        $info = parse_url($url);
        extract($info);
        $query = isset($query) ? trim($query) : '';
        $path = isset($path) ? trim($path) : '';    $fp = fsockopen($host, 80, $errno, $errstr, $timeout);
        if (!$fp) {
            exit("$errstr ($errno)<br>\n");
        }    $write = fwrite($fp, "GET {$path}?{$query} HTTP/1.0\r\nHost: {$host}\r\n\r\n");//    while (!feof($fp)) {
    //        echo fread($fp, 4096);
    //    }
    }
    $url = "http://mydir.com/index.php?act=sendMail";
    $emailList = array(...);
    foreach ($emailList as $email) {
        fSockGet($url);
    }
      

  4.   

    上面我发送不是针对fsockopen来发邮件,而是针对你所说的并发
      

  5.   

    利用 sock 发送邮件,就需要自行完成 email 协议的全部对话过程
    这可不是一个简单的过程,所以通常用 phpmailer 类来完成(要是简单,就不需要写成类了)你可以通过 fsockopen 触发使用 phpmaile 发送邮件的程序,并不等待其返回
    就是通常说的伪多进程
      

  6.   


    就看到foreach 循环 然后再哪里关闭啊?
      

  7.   


    在方法fSockGet末尾关闭,我忘记关闭了
      

  8.   

    fSockGet这个方法是我写的,它可以实现并发,例如你循环执行fSockGet,那么没循环一次fSockGet,就算增加了一个并发
      

  9.   

    fputs ( $fp, "QUIT " . "\r\n" );
    fgets ( $fp, 512 );
    fclose ( $fp );这个不是发送关闭?你的在哪里关闭???
      

  10.   

    function fSockGet($url, $timeout = 3)
    {
        ...
        ...
        ...
        fclose($fp);    // << 这里关闭
    }
      

  11.   

    对于 #3 的代码:
    因为 fsockopen 是在 fSockGet 函数中的,所以无需显式的关闭。退出函数就自动关闭了fSockGet 函数实际上是通过 fsockopen 打开了原程序。这就是所谓的伪多进程有一点需要注意:
    if (isset($_GET['act']) && $_GET['act'] == 'sendMail') {
        sendEmail();// 发送邮件操作
    }
    这里才是真正的发送邮件的
    不过执行完 sendEmail 后没有终止程序,于是将会去执行尾部的
    foreach ($emailList as $email) {
    这将导致系统崩溃
      

  12.   


    的确,楼主要注意了,不然就死循环了因为 fsockopen 是在 fSockGet 函数中的,所以无需显式的关闭。退出函数就自动关闭了
    有收获了
      

  13.   

    嗯,不是死循环!而是雪崩
    比如 $emailList 中有2项
    当然是他会正常结束的
    但他触发了2个程序进程,而每个程序进程又会触发2个程序进程。
    于是 1 2 4 8 16 32 64 128 256 ....
      

  14.   

    php处理不了这么多。我使用fsockopen下载网页,同一此请求中只能下载一张。多一张就卡得要死。如果批量,基本上是无法下载,连一张都无法下载,而且还死机,重启apache都好不过来。