代码有问题吗,为什么异步不成功
function asyn_sendmail(){ $url="/sysemail.php"; $emailarr = array('13488804050@126.com','yangyangdexiaowo@163.com','254070913@qq.com'); $par="email=".implode(',',$emailarr)."&........"; $header = "POST $url HTTP/1.0\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($par) . "\r\n\r\n"; $fp = fsockopen ("passport.show.sina.com.cn",80, $errno, $errstr, 30); fputs ($fp, $header.$par); // echo "<br />"; // while(!feof($fp)){ // $rs .= fgets($fp,256); // } //echo $rs ; //echo '<br />'; fclose($fp); } asyn_sendmail(); sysemail.php include('include/Cantents.php'); $emailarr = array('13488804050@126.com','yangyangdexiaowo@163.com','254070913@qq.com'); include('class/mail/sendmail.class.php'); $content="test"; foreach($emailarr as $key=>$v){ $send_email=new sendMail($v,$content,'sinashow'); }
2011-01-22 15:00:42

4 Answers

呵呵,fsocket是可以的,还有curl函数也可实现。
注意记得加上ignore_user_abort(TRUE);

另外描述清楚,你预想结果是啥,不成功是什么样?你又是怎么理解异步的。

2011-01-22 19:05:28

curl 是可以实现的。

  
function curl_request_async($url, $params, $type='POST') { foreach ($params as $key => &$val) { if (is_array($val)) $val = implode(',', $val); $post_params[] = $key.'='.urlencode($val); } $post_string = implode('&', $post_params); $parts=parse_url($url); $fp = fsockopen($parts['host'], isset($parts['port'])?$parts['port']:80, $errno, $errstr, 30); // Data goes in the path for a GET request if('GET' == $type) $parts['path'] .= '?'.$post_string; $out = "$type ".$parts['path']." HTTP/1.1\r\n"; $out.= "Host: ".$parts['host']."\r\n"; $out.= "Content-Type: application/x-www-form-urlencoded\r\n"; $out.= "Content-Length: ".strlen($post_string)."\r\n"; $out.= "Connection: Close\r\n\r\n"; // Data goes in the request body for a POST request if ('POST' == $type && isset($post_string)) $out.= $post_string; fwrite($fp, $out); fclose($fp); }
2011-01-22 20:03:55

已经有了方案,还是在后台做一个定时程序吧,在前台怎么实现都是需要等待返回结果的,前台的各种都是模拟http请求,

2011-01-22 22:12:20

1 将post 改为 get 方式请求
2 那段模拟post请求完全不严谨,至少也得指定个 Host ,Connection ,Accept,User-Agent 吧,这些浏览器每次请求都会发送,模拟尽量像点吧。
3 $par="email=".implode(',',$emailarr)."&........"; 这句 email 前至少也得加个 ?(问号) 或者第一个参数前。
4 sysemail.php foreach 中 $send_email=new sendMail($v,$content,'sinashow');
sendMail这个类 能不能改成单例模式,或者自己增加个方法来实现 sendMail 构造方法中的实现?

关于排错 :

1 测试下请求到 sysemail.php 了没有,在sysemail.php文件中通过记录log 看下。
2 在 asyn_sendmail()方法中打印出响应的内容,最主要是响应头,看看http状态码
3 将程序先改为get,那么再浏览器上直接测试:passport.show.sina.com.cn?email=xxx@xx.com
看看是否能给 xxx@xx.com 发送邮件。

还有,能不能不用这样的方法呢? 如果实时性要求不高,可以将发送邮件任务写到 数据库,再由程序定时读取,再发送。这是最简单的,还有就是使用队列来实现异步。

目前我能帮你的只有这些了。。。。

2011-01-22 16:37:02
您不能回答该问题或者回答已经关闭!

相关文章推荐

  • C#实例解析适配器设计模式

    将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作

  • C#中using指令的几种用法

    using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到

  • C#运行时相互关系

    C#运行时相互关系,包括运行时类型、对象、线程栈和托管堆之间的相互关系,静态方法、实例方法和虚方法的区别等等

  • C#协变和逆变

    “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型,“逆变”则是指能够使用派生程度更小的类型

  • 使用托管C++粘合C#和C++代码(二)

    本文实现一下C++代码调用C#代码的过程。我构造一个简单并且直观的例子:通过C++ UI 触发C# UI.

  • C#开发高性能Log Help类设计开发

    项目中要在操作数据库的异常处理中加入写Log日志,对于商业上有要求,写log时对其它操作尽可能影响小,不能因为加入log导致耗时太多

  • C#开发中的反射机制

    反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等

  • Async和Await使异步编程更简单

    C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作

  • C#基础概念之延迟加载

    延迟加载(lazy load)是Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作

  • 使用托管C++粘合C#和C++代码(一)

    C#在xml读写,数据库操纵,界面构造等很多方面性能卓越;C++的效率高,是底层开发的必备武器

  • C#中的索引器的简单理解和用法

    C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作

  • 深入C# 序列化(Serialize)、反序列化(Deserialize)

    C#中的序列化和反序列化,序列化是.NET运行时环境用来支持用户定义类型的流化的机制