Archive for the ‘php学习’ Category

coreseek排序—attribute ‘id’ not found - IGNORING

2015-08-13

测试新站 Simple CD下载 时,出现排序不成功的问题。

检查原因发现coreseek(sphinx)建立索引时提示错误:WARNING: attribute ‘id’ not found - IGNORING,如图:

原因:

sphinx不能使用主键来做属性字段,你的索引配置文件中一定用了类似

sql_attr_uint = id (id为表的主键)

解决方法:

去掉sql_attr_uint = id

或改为

sql_query = SELECT id,id as aid,body from table

sql_attr_uint = aid

即:在sql_query中给id用as 重新命个名字

 2、重建索引

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/ed2000.conf all rotate

3、建立索引排序,在查询语句中加入排序规则

$cl->SetSortMode(SPH_SORT_EXTENDED, "aid desc");

2012版PHP调用谷歌翻译实现翻译功能

2012-06-02

之前的php调用谷歌来实现翻译的api已经关闭,因为不需要验证码,所以可以尝试使用php的curl类来翻译,以下是代码:

 

  1. <?php
  2. /*
  3. * PHP调用谷歌翻译
  4. * author:野草
  5. * date:2012/3/23
  6. * email:129@jinzhe.net
  7. * site:http://yckit.com
  8. */
  9. function translate($text,$language='zh-cn|en'){
  10.     if(empty($text))return false;
  11.     @set_time_limit(0);
  12.     $html = "";
  13.     $ch=curl_init("http://google.com/translate_t?langpair=".urlencode($language)."&text=".urlencode($text));
  14.     curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  15.     curl_setopt($ch,CURLOPT_HEADER, 0);
  16.     curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
  17.     $html=curl_exec($ch);
  18.     if(curl_errno($ch))$html = "";
  19.     curl_close($ch);
  20.     if(!empty($html)){
  21.         $x=explode("</span></span></div></div>",$html);
  22.         $x=explode("onmouseout=\"this.style.backgroundColor='#fff'\">",$x[0]);
  23.         return $x[1];
  24.     }else{
  25.         return false;
  26.     }
  27. }
  28. //echo translate('개','kr|zh-cn');
  29. echo translate('2012版PHP调用谷歌翻译实现翻译功能');
  30. ?>

友情链接一下笑话

php自动百度ping代码

2012-03-09

帮朋友写一个自动更新程序用到的一段php自动百度ping代码:

  1. <?php
  2. function postUrl($url, $postvar) {
  3.     $ch = curl_init();
  4.     $headers = array(
  5.             "POST ".$url." HTTP/1.0",
  6.             "Content-type: text/xml;charset=\"utf-8\"",
  7.             "Accept: text/xml",
  8.             "Content-length: ".strlen($postvar)
  9.         );
  10.     curl_setopt($ch, CURLOPT_URL, $url);
  11.     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  12.     curl_setopt($ch, CURLOPT_POST, 1);
  13.     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  14.     curl_setopt($ch, CURLOPT_POSTFIELDS, $postvar);
  15.     $res = curl_exec ($ch);
  16.     curl_close ($ch);
  17.     return $res;
  18. }
  19. $baiduXML = "
  20.     <?xml version=\"1.0\" encoding=\"UTF-8\"?>
  21.     <methodCall>
  22.     <methodName>weblogUpdates.extendedPing</methodName>
  23.     <params>
  24.     <param><value><string>宽宽手记</string></value></param>
  25.     <param><value><string>http://www.kuankuan.net</string></value></param>
  26.     <param><value><string>http://www.kuankuan.net/2011/10/25/6-ways-to-improve-the-conversion-rate-of-foreign-trade-b2c/</string></value></param>
  27.     <param><value><string>http://www.kuankuan.net/rss</string></value></param>
  28.     </params>
  29.     </methodCall>";
  30. $res = postUrl('http://ping.baidu.com/ping/RPC2', $baiduXML);
  31. //下面是返回成功与否的判断(根据百度ping的接口说明)
  32. if (strpos($res, "<int>0</int>"))
  33.         echo "PING成功";
  34.     else
  35.         echo "PING失败";
  36. ?>

clickbank 短信提醒代码及设置方法

2010-09-15

有人在寻找设置Clickbank产生销售时手机短信提醒的设置方法,很多说测试不成功,onlyqian把代码发我测试了一下,是可以用的。

原理简述:cb产生sale以后,根据自己后台提供的secret key和mail.php,使用mail函数发邮件至指定邮箱,邮箱为139邮箱或qq邮箱绑定手机,即可收到cb产生销售的手机短信提醒。

代码如下:点击下载 (此代码cb后台可获取)

  1. <?php
  2.  
  3. function cbValid() {
  4.  
  5.     $key='7009';
  6.     $ccustname = $_REQUEST['ccustname'];
  7.     $ccustemail = $_REQUEST['ccustemail'];
  8.     $ccustcc = $_REQUEST['ccustcc'];
  9.     $ccuststate = $_REQUEST['ccuststate'];
  10.     $ctransreceipt = $_REQUEST['ctransreceipt'];
  11.     $cproditem = $_REQUEST['cproditem'];
  12.     $ctransaction = $_REQUEST['ctransaction'];
  13.     $ctransaffiliate = $_REQUEST['ctransaffiliate'];
  14.     $ctranspublisher = $_REQUEST['ctranspublisher'];
  15.     $cprodtype = $_REQUEST['cprodtype'];
  16.     $cprodtitle = $_REQUEST['cprodtitle'];
  17.     $ctranspaymentmethod = $_REQUEST['ctranspaymentmethod'];
  18.     $ctransamount = $_REQUEST['ctransamount'];
  19.     $caffitid = $_REQUEST['caffitid'];
  20.     $cvendthru = $_REQUEST['cvendthru'];
  21.     $cbpop = $_REQUEST['cverify'];
  22.  
  23.     $xxpop = sha1("$ccustname|$ccustemail|$ccustcc|$ccuststate|$ctransreceipt|$cproditem|$ctransaction|"
  24.                       ."$ctransaffiliate|$ctranspublisher|$cprodtype|$cprodtitle|$ctranspaymentmethod"
  25.                       ."|$ctransamount|$caffitid|$cvendthru|$key");
  26.    
  27.  
  28.     $xxpop=strtoupper(substr($xxpop,0,8));
  29.  
  30.     if ($cbpop==$xxpop) return 1;
  31.     else return 0;
  32. }
  33. if (cbValid())mail("test@9499.com", "ClickBank - " . $_REQUEST['ctransaction'],"Product: " . $_REQUEST['cprodtitle'] . "\nPublisher: " . $_REQUEST['ctranspublisher'] . "\nAffiliate: " . $_REQUEST['ctransaffiliate'] . "\nTransaction: " . $_REQUEST['ctransaction'] . "\nAmount: " . $_REQUEST['ctransamount']);
  34. ?>

用法:

1、命名以上代码为mail.php,修改mail.php中的Secret Key 改为任意的大写字母或数字,邮箱改为你的邮箱,保存,然后上传到你的空间上。

2、打开CB账号,进入 ACCOUNT SETTINGS - My site – Advanced Tools – Edit

Secret Key: 填上刚才PHP文件中的“任意的大写字母或数字”
Instant Notification URL: 点 (request access)

3、出来一列问题,你都选 YES,然后下面的Terms of Use 拉下来, I understand and agree to the Terms of Use. * 打勾,保存。

4、然后 Instant Notification URL 填上你刚才那个PHP文件的地址,如 XXX.COM/mail.php 点后面的 TEST,如果有收到信件就代表成功了!

不成功的原因:

1、存放mail.php的webhosting不支持mail函数。
2、邮箱对没有反向解析过的邮件发送,默认设为垃圾邮件件,推荐使用qq邮箱。
3、test的时候,选择2.0,本人测试1.0成功。

另外refund也会提醒。

php 模拟POST提交的三种方法[实例代码]

2010-08-27

分享使用php模拟POST提交的三种方法,可以做的事很多:提交表单,发布留言。稍稍改进一下可以当做 php留言群发的小工具使用,只公布两种方法,其它的自己加工吧。

关php于执行效率的问题,可以改进为linux底下命令行执行php,减少输出和增加多任务。

以下是代码:

1、通过curl函数

  1. $post_data = array();
  2. $post_data['clientname'] = "test08";
  3. $post_data['clientpasswd'] = "test08";
  4. $post_data['submit'] = "submit";
  5. $url='http://xxx.xxx.xxx.xx/xx/xxx/top.php';
  6. $o="";
  7. foreach ($post_data as $k=>$v)
  8. {
  9.     $o.= "$k=".urlencode($v)."&";
  10. }
  11. $post_data=substr($o,0,-1);
  12. $ch = curl_init();
  13. curl_setopt($ch, CURLOPT_POST, 1);
  14. curl_setopt($ch, CURLOPT_HEADER, 0);
  15. curl_setopt($ch, CURLOPT_URL,$url);
  16. //为了支持cookie
  17. curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  18. curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
  19. $result = curl_exec($ch);

2.通过fsockopen

  1. $URL=‘http://xxx.xxx.xxx.xx/xx/xxx/top.php';
  2. $post_data['clientname'] = "test08";
  3. $post_data['clientpasswd'] = "test08";
  4. $post_data['submit'] = "ログイン";
  5. $referrer="";
  6. // parsing the given URL
  7. $URL_Info=parse_url($URL);
  8. // Building referrer
  9. if($referrer=="") // if not given use this script as referrer
  10. $referrer=$_SERVER["SCRIPT_URI"];
  11.  
  12. // making string from $data
  13. foreach($post_data as $key=>$value)
  14. $values[]="$key=".urlencode($value);
  15.  
  16. $data_string=implode("&",$values);
  17. // Find out which port is needed - if not given use standard (=80)
  18. if(!isset($URL_Info["port"]))
  19. $URL_Info["port"]=80;
  20. // building POST-request:
  21. $request.="POST ".$URL_Info["path"]." HTTP/1.1\n";
  22. $request.="Host: ".$URL_Info["host"]."\n";
  23. $request.="Referer: $referrer\n";
  24. $request.="Content-type: application/x-www-form-urlencoded\n";
  25. $request.="Content-length: ".strlen($data_string)."\n";
  26. $request.="Connection: close\n";
  27. $request.="\n";
  28. $request.=$data_string."\n";
  29. $fp = fsockopen($URL_Info["host"],$URL_Info["port"]);
  30. fputs($fp, $request);
  31. while(!feof($fp)) {
  32.     $result .= fgets($fp, 128);
  33. }
  34. fclose($fp);

3.使用httpclient类

  1. $pageContents = HttpClient::quickPost('http://example.com/someForm', array(       
  2.     'name' => 'Some Name',       
  3.     'email' => 'email@example.com'      
  4. ));

附:httpclient类库 下载 及 httpclient 类库的其它用法举例:

检查页面是否存在

  1. $client = new HttpClient('bankcha.com');       
  2. $client->setDebug(true);       
  3. if (!$client->get('/thispagedoesnotexist')) {       
  4.     die('An error occurred: '.$client->getError());       
  5. }       
  6. if ($client->getStatus() == '404') {       
  7.     echo 'Page does not exist!';       
  8. }       
  9. $pageContents = $client->getContent();

伪造客户端

  1. $client = new HttpClient('bankcha.com');       
  2. $client->setDebug(true);       
  3. $client->setUserAgent('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.3a) Gecko/20021207');       
  4. if (!$client->get('/')) {       
  5.     die('An error occurred: '.$client->getError());       
  6. }       
  7. $pageContents = $client->getContent();

登录验证并请求一个网页

  1. $client = new HttpClient('bankcha.com');       
  2. $client->post('/login.php', array(       
  3.     'username' => 'Simon',       
  4.     'password' => 'ducks'      
  5. ));       
  6. if (!$client->get('/private.php')) {       
  7.     die('An error occurred: '.$client->getError());       
  8. }       
  9. $pageContents = $client->getContent();

httpclient类 更多用法实例,可参考:
http://scripts.incutio.com/httpclient/index.php

[转载]php程序员如何进阶-多看、多写、多交流

2010-04-14

原文载自志凡’s blog

很多初学者都说入门之后不知道该如何提高,我都是告诉他们多实践。最近在我们的团队中建立了一个学生的实习小组,我在和他们讲授程序设计分析的时候,我也给他们了个小建议写代码就是多看多写,后来又补上一点:多交流

我认为不管是做什么行业或工作,只要专注都可以有自己不同的成就。因此我觉得做任何事必需要有热情,而且是持续的热情,有一句话说“好的开始是成功的一半,持之以恒是成功的另一半”我很认同,所以自己的认定的事情就应该坚持的去做。我提出了三多:多看、多写、多交流,来将热情付出行动。

这里谈到的是当你入门后怎么使自己不段的提高的一些方法,可能只是一些片面之词,但我相信只要你去做了都会有一些收获。

在 我们开始学习程序,都必须对一些基础知识进行学习,例如语法、常用的内置函数,就PHP来说内置函数有成百上千个(没有统计过),就常用的也有上百个。怎 么才可以对这些逐个掌握?死记硬背?这是一个常人都无法做到的,即使是记住了,通常能否灵活的应用还要打个问号。那该怎么做呢?

首先是多看,看技术文章,看开源代码。

技 术文章应该不必多说,这是学习新技术和积累技术的必备渠道。这里我谈谈该怎么看,很多人包括我自已有时候,只是看一遍就算了,这样的结果一般都是知其然不 知所以然。我认为要把别人的东西变成自己的必须实践。把文章所说的技术通过自己理解的写出来并改进,并在合适的时候尽快应用的你的实际工作中。

再 说看代码,一是一些网友的代码,这里就要有一个观念,就是不能迷信别人的代码,应该客观的去看,学习别人的方法的时候,应该去考虑它是否有问题,应该是辩 证的态度对对待,如果有问题自己试着去解决,并和他们交流。二是看开源项目中的代码,这类就不仅仅是看代码了还有框架、设计思想等。我建议每个人至少看到 1到2套开源代码,因为我认为开源代码对自己的提高比一般的技术文章要快的很多。首先它们都是一些较为成功的项目,在成功项目中其实包含了原作者的经验和 其项目不断改进中产生的非富经验。对于开源项目,我的方法是先从它的入口文件看起一般是index.php看它的整体文件结构,再看它的公共文件里的内 容,具体的一些常用的工具类,这样会对整个项目的结构有一个了解,然后就是你所兴趣的功能的具体实现代码,并详细搞懂他的实现方式和原理。在看的过程中你 肯定可以学到很多有价值的东西。我个人的经验是:看的最多的是DZ的代码,其它项目也很多,但比较全面的还是dz的代码。个人认为看代码还是比较速成的一 种方式,因为别人的走过的路你就不需要再走了,站在巨人的肩膀上总是可以走的更快更远。

关于多写其实 上面也提到了,学习后的东西应该要马上实践,并尽快在合适的时候应用到自己的工作中,这样才能收获的更多更快。另一方面是自己尝试着去写一些小项目,只有 去做一完整性的项目才是最有价值的实践,但在做这些实践中我认为应该严格的要求自己,既然是为了学习,就不是应该敷衍了事,尽可能把所有细节都处理的最 好。还有就是时间一定要要求自己,不能拖,一方面是要给自己压力,二是如果时间拖的太久思路和激情没法持续的话,那你的计划很可能最终会失败并不了了之。

开 篇我提到很多初学者都说入门之后不知道该如何提高,我都告诉他们要多写,为什么会无法提高,我认为是没有目标,只要你给自己定一个目标,然后去实现,完成 后其实也达到自己提高的目的了。例如你去写一个简单的博客程序,在实现的过程中会遇到很多问题,再逐一去解决,这样你就有了学习的方向了,解决问题就是积 累经验和学习的过程。总的来说要给自己设置一个需要完成的目标,这个目标是什么有什么内容,什么时候完成都很清楚。

其实说到这里就可以回答上面该如何去掌握那么多的函数呢,当你看过和写过很多代码后你会发现你所掌握的函数和方法已经很多了,这就是在实践的过程中无形产生的结果。所以什么语法之类的基础的东西是不需要去死亡硬背的,在运用的时候自然就可以对它驾轻就熟。

最 后我认为做技术的交流很重要,因为做技术是个永无止境的学习过程,而交流是一种更有效的学习方式。因为每个人的知识系统都是不同的,每个人掌握的东西不 同,思维方式各异。所以交流就是一个互相学习和促进的过程,当你把自己的想法与别人交流你就会收获更多新的想法。交流是一咱倍速增长的过程,前一段我写了 一篇《当你开启一扇门的时候,很多扇门将为你开启》给我们的团队就是想表达这个想法。

交流有很多的, 有线上的有线下的,大家都有上论坛的习惯,这是一种交流方式,但我认为线下交流更有效,语言的交流比文字的交流方式更直接和全面。因为我是PEA福州的常 委之一,很多线下活动是由我组织的,从参加人数来看并不是很理想,所以我认为做技术的应该更开放一些,多参加类似PEA的这种交流。

交流一定要是开放的,所以在交流中应该是一种包容的心态去面对。也就是说我们是持有自己想法的时候也应该耐心倾听他人的意见,不能认死理。只有站在客观的角度去看问题才能把问题看的更透彻,只有不抵触才能让自己学到更多的东西。

在我们的技术团队中有定期的技术分享会,目的就是为了建立交流的平台,让大家都尝试表达自己的意见,锻炼自己的能力,并可以和更多的人去交流。

最后总结一下,多看,吸收别人的经验转化为自己所用,多写,全面性的锻炼自己的能力,多交流,利用众人的智慧。三多更多的就是去做。

使用php结合移动飞信接口发送短信

2009-04-28

作用:通过飞信API发送短信到手机,进行日程提醒、服务器监控、报警、故障通知或短信自动控制。

好处:免费、方便、提高效率、偷懒。

使用接口:http://sms.api.bz/

API接口调用方式:http访问,支持GET和POST。

http://sms.api.bz/fetion.php?username=您的移动飞信登录手机号&password=您的移动飞信登录密码&sendto=接收短信的飞信好友手机号(也可以是你自己的手机号)&message=短信内容

其实只需要把这个地址的内容替换成自己的手机号和相关信息后,加入浏览器,就可以成功发送短信了。

注:短信内容最大长度为180个汉字,超过180个汉字不发送。返回的信息为UTF-8编码的中文文本信息。

为什么使用php来调用呢?

  1. 方便
  2. 可做一些程序判断,用来监测网站,服务器日志等。
  3. 有时也可以装装B的,呵呵:)

php调用方法一:在PHP5中通过file_get_contents函数发送短信(HTTP GET 方式)

代码如下:

  1. <?php   
  2. $url = "http://sms.api.bz/fetion.php?username=13812345678&password=123456&sendto=13512345678&message=短信内容";   
  3. $result = file_get_contents($url);   
  4. echo $result; //返回信息默认为UTF-8编码的汉字,如果你的页面编码为gb2312,请使用下行语句输出返回信息。   
  5. //echo iconv("UTF-8", "GBK", $result);   
  6. ?>

php调用方法二:在PHP中通过curl发送短信(HTTP POST 方式)

  1. <?php   
  2. $data["username"] = 13812345678;   
  3. $data["password"] = "password123";   
  4. $data["sendto"] = 13512345678;   
  5. $data["message"] = "这是一条测试短信!";   
  6.   
  7. $curl = new Curl_Class();   
  8. $result = @$curl->post("http://sms.api.bz/fetion.php", $data);   
  9. echo $result; //返回信息默认为UTF-8编码的汉字,如果你的页面编码为gb2312,请使用下行语句输出返回信息。   
  10. //echo iconv("UTF-8", "GBK", $result);   
  11.   
  12. //curl类   
  13. class Curl_Class   
  14. {   
  15.     function Curl_Class()   
  16.      {   
  17.         return true;   
  18.      }   
  19.   
  20.     function execute($method, $url, $fields = '', $userAgent = '', $httpHeaders = '', $username = '', $password = '')   
  21.      {   
  22.         $ch = Curl_Class::create();   
  23.         if (false === $ch)   
  24.          {   
  25.             return false;   
  26.          }   
  27.   
  28.         if (is_string($url) && strlen($url))   
  29.          {   
  30.             $ret = curl_setopt($ch, CURLOPT_URL, $url);   
  31.          }   
  32.         else  
  33.          {   
  34.             return false;   
  35.          }   
  36.         //是否显示头部信息   
  37.          curl_setopt($ch, CURLOPT_HEADER, false);   
  38.         //   
  39.          curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
  40.   
  41.         if ($username != '')   
  42.          {   
  43.              curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);   
  44.          }   
  45.   
  46.         $method = strtolower($method);   
  47.         if ('post' == $method)   
  48.          {   
  49.              curl_setopt($ch, CURLOPT_POST, true);   
  50.             if (is_array($fields))   
  51.              {   
  52.                 $sets = array();   
  53.                 foreach ($fields AS $key => $val)   
  54.                  {   
  55.                     $sets[] = $key . '=' . urlencode($val);   
  56.                  }   
  57.                 $fields = implode('&',$sets);   
  58.              }   
  59.              curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);   
  60.          }   
  61.         else if ('put' == $method)   
  62.          {   
  63.              curl_setopt($ch, CURLOPT_PUT, true);   
  64.          }   
  65.   
  66.         //curl_setopt($ch, CURLOPT_PROGRESS, true);   
  67.         //curl_setopt($ch, CURLOPT_VERBOSE, true);   
  68.         //curl_setopt($ch, CURLOPT_MUTE, false);   
  69.          curl_setopt($ch, CURLOPT_TIMEOUT, 10);//设置curl超时秒数   
  70.   
  71.         if (strlen($userAgent))   
  72.          {   
  73.              curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);   
  74.          }   
  75.   
  76.         if (is_array($httpHeaders))   
  77.          {   
  78.              curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeaders);   
  79.          }   
  80.   
  81.         $ret = curl_exec($ch);   
  82.   
  83.         if (curl_errno($ch))   
  84.          {   
  85.              curl_close($ch);   
  86.             return array(curl_error($ch), curl_errno($ch));   
  87.          }   
  88.         else  
  89.          {   
  90.              curl_close($ch);   
  91.             if (!is_string($ret) || !strlen($ret))   
  92.              {   
  93.                 return false;   
  94.              }   
  95.             return $ret;   
  96.          }   
  97.      }   
  98.   
  99.     function post($url, $fields, $userAgent = '', $httpHeaders = '', $username = '', $password = '')   
  100.      {   
  101.         $ret = Curl_Class::execute('POST', $url, $fields, $userAgent, $httpHeaders, $username, $password);   
  102.         if (false === $ret)   
  103.          {   
  104.             return false;   
  105.          }   
  106.   
  107.         if (is_array($ret))   
  108.          {   
  109.             return false;   
  110.          }   
  111.         return $ret;   
  112.      }   
  113.   
  114.     function get($url, $userAgent = '', $httpHeaders = '', $username = '', $password = '')   
  115.      {   
  116.         $ret = Curl_Class::execute('GET', $url, '', $userAgent, $httpHeaders, $username, $password);   
  117.         if (false === $ret)   
  118.          {   
  119.             return false;   
  120.          }   
  121.   
  122.         if (is_array($ret))   
  123.          {   
  124.             return false;   
  125.          }   
  126.         return $ret;   
  127.      }   
  128.   
  129.     function create()   
  130.      {   
  131.         $ch = null;   
  132.         if (!function_exists('curl_init'))   
  133.          {   
  134.             return false;   
  135.          }   
  136.         $ch = curl_init();   
  137.         if (!is_resource($ch))   
  138.          {   
  139.             return false;   
  140.          }   
  141.         return $ch;   
  142.      }   
  143.   
  144. }   
  145. ?>