if (function_exists("imagecreatetruecolor")){
      //resize picture
      $new = imagecreatetruecolor($intWidth, $intHeight);
        imagealphablending($new,false);
      ImageCopyResampled($new, $img, 0, 0, 0, 0, $intWidth, $intHeight, $arrImageInfo["width"], $arrImageInfo["height"]);
      imagesavealpha($new,true);
    } else {
      //resize picture
      $new = imagecreate($intWidth, $intHeight);
      imagealphablending($new,false);
      ImageCopyResized($new, $img, 0, 0, 0, 0,$intWidth, $intHeight, $arrImageInfo["width"], $arrImageInfo["height"]);
      imagesavealpha($new,true);
    }
参考:http://hi.baidu.com/fanfan201314/item/2d4857de01f3cce93cc2cbff
点击在新窗口中浏览此图片点击在新窗口中浏览此图片

   做web开发的朋友都清楚,js程序的调试是相当郁闷的,因为首先这种语言语法比较灵活,它是一种弱类型的脚本语言,很多错误是无法控制的,这些不谈,最痛苦的是没有什么好的调试工具,现在的情况比以前稍好,在Firefox下还有firebug,这的确是一个不错的js调试工具,但在IE下使用就很麻烦,而且效果很不好,鄙人一直苦于寻找一个很好的IE下的js调试工具,能够自动捕获错误,并定位位置和原因,没想到今天竟在无意中寻找到了这么个好工具,不敢私藏,共享出来,希望能为各位web开发者带来方便

这个工具的名字叫Companion.JS,请注意,这可不是一个js文件,而是一个名字,它是作为ie的插件来安装使用的,而且需要结合 Microsoft Script Debugger使用,通过安装这个工具,但页面出现错误时会在左上角弹出一个小错误提示,点击会在IE下面显示出一个错误控制台,就如FF下的 firebug控制台一样。错误信息提示很详细。

如下是官网的一个错误提示示例图:
点击在新窗口中浏览此图片

官网地址:http://www.my-debugbar.com/wiki/CompanionJS/HomePage

具体使用方法为:
1、先下载Companion.JS安装文件,然后安装。
2、下载安装Microsoft Script Debugger,如果您的机器已经安装过了就可以免过这一步。
3、打开IE菜单“工具”–“Internet选项”–“高级”,找到“禁用脚本调试(Internet Explorer)”和“禁用脚本调试(在Internet Explorer之外)”,将两个选项前面的对钩都去掉,然后重启IE。
4、最后,测试安装成功于否:
在Ie中输入:http://www.my-debugbar.com/wiki/uploads/CompanionJS/dummy.htm,然后点击click me链接,如果左上角弹出一个小错误提示或下面控制台出现了错误信息提示,就说明您已经安装成功了。


如果没有安装Microsoft Script Debugger是只提示不会有黄色标识的:
提示:Microsoft Script Debugger下载可到MS官网(需要经过MS的操作系统正版验证):http://www.microsoft.com/downloads /details.aspx?displaylang=zh-cn&FamilyID=E606E71F-BA7F-471E-A57D- F2216D81EC3D#filelist或到baidu里输入“Microsoft Script Debugger 下载”寻找一下。

求Microsoft Script Debugger中文版的下载地址:
是这个吗  Windows Script Debugger
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=E606E71F-BA7F-471E-A57D-F2216D81EC3D
继续追问: 对,就是这个。
Microsoft DownLoad Url:
http://www.microsoft.com/zh-cn/download/details.aspx?id=23992

---------------------------------------------------------------------------------------------------------------------------------------------------------------

IE下使用firebug:
firebug官网:https://getfirebug.com/
把下面这段代码复制替换一个自己新建立的收藏Url即可,然后需要时再运行一下收藏夹,进而按F12调出来即可,如不运行收藏夹则是IE自带的那个。
说起正则表达式,可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch和Walter Pitts这两位神经生理学家研究出一种数学方式来描述这些神经网络。

1956年,一位叫Stephen Kleene的美国数学家在McCulloch和Pitts早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。

随后,发现可以将这一工作应用于使用Ken Thompson的计算搜索算法的一些早期研究,Ken Thompson是Unix的主要发明人。正则表达式的第一个实用应用程序就是Unix中的qed编辑器。

这个专题主要是为了提高大家对正则表达式的认识和高级的使用。

1 使用正则表达式来检测HTML是否关闭


function check_html($html) {
    preg_match_all("/<([a-zA-Z0-9]+)\\s*[^\\/>]*>/",$html,$start_tags);
    preg_match_all("/<\\/([a-zA-Z0-9]+)>/", $html, $end_tags);
    if(count($start_tags[1]) != count($end_tags[1])) return false;
    for($i = 0; $i < count($start_tags[1]); $i++) {
        if(!in_array($start_tags[1][$i], $end_tags[1])) return false;
    }
    return true;
}


解释:

/<([a-zA-Z0-9]+)\\s*[^\\/>]*>/这个模式是用来匹配HTML的标记(如:<head>、<div>、<div id="main">等等,但是除了<br/>这种)的,并且在$start_tags保持着标签的名字(如:head、div等)。而/<\\/([a-zA-Z0-9]+)>/这个模式是用来匹配闭合的HTML标记(如:</head>,</div>等)的。并且在$end_tags中保持这闭合的标签名。然后我们用count($start_tags[1]) != count($end_tags[1])这个条件语句来判断开始的标记跟闭合的标记是否相等,不相等就说明没闭合。最后用in_array($start_tags[1][$i], $end_tags[1])来判断开始标跟闭合的标记是否相等。至此,我们就完成了HTML的匹配了!

2 匹配E-mail格式


function check_email($email) {
        if(preg_match("/^[\w\d!#$%&'*+-\/=?^`{|}~]+(\.[\w\d!#$%&'*+-\/=?^`{|}~]+)*@([a-z\d][-a-z\d]*[a-z\d]\.)+[a-z][-a-z\d]*[a-z]$/", $eamil)) return true;
        return false;
}


解释:

不要被/^[\w\d!#$%&'*+-\/=?^`{|}~]+(\.[\w\d!#$%&'*+-\/=?^`{|}~]+)*@([a-z\d][-a-z\d]*[a-z\d]\.)+[a-z][-a-z\d]*[a-z]$/这条模式给吓跑了,其实也很简单的。前部分[\w\d!#$%&'*+-\/=?^`{|}~]+(\.[\w\d!#$%&'*+-\/=?^`{|}~]+)*只是匹配符合RFC-2882标准的E-mail地址允许出现的字符,就是英文字母,数字跟一些符号,有兴趣可以查询RFC-2882手册,而([a-z\d][-a-z\d]*[a-z\d]\.)+就是匹配HOST的。最后[a-z][-a-z\d]*[a-z]就是匹配顶级域名的(如:.com、.org)。

3 非贪心模式

有时候使用正则表达式的时候,你会发现有以下的问题:


preg_match('/".*"/', 'Tony say:"hello", Jack say: "Hi"', $matches);
print_r($matches);


很惊奇的你会发现匹配的是这样的内容"hello", Jack say: "Hi",而不是"hello"和"Hi"。这就是贪心匹配引起的。在贪心匹配中,正则表达式会尽可能的匹配最多的字符,所以出现了第一种情况,但是我们想要的是第二种情况,那我们要怎么做呢?

我们可以使用非贪心匹配,将刚才的模式改为/".*?"/这样就可以看见我们想要的结果了。*?这个就是非贪心匹配模式。还有另外一种就是+?。
 *?:前面的字符可以出现任意多次,但是遇到*?后的一个字符即停止匹配。
 +?:前面的字符可以出现一次或者多次,但是遇到+?后的一个字符即停止匹配。

4 检测一个用户密码是否安全


function is_good_pw($pw) {
    if(preg_match('/(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8,16}/', $pw)) {
        return true;
    }
    return false;
}


解释:

在本例中,我们使用了/(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8,16}/模式来匹配我们的密码。在这个模式中,我们使用了正则表达式中的前瞻模式(?=)。(?=.*[0-9])这个是匹配密码中有数字,而(?=.*[a-z])是匹配密码中有小写字母,最后(?=.*[A-Z])就是匹配密码中有大写字母。而.{8,16}这个就是匹配密码是由8至16个字符组成的。那么我们的密码就需要有数字,大写字母和小写字母组成的就属于安全的密码了~

5 匹配一个网站中的所有链接


function get_links($link) {
    $html = file_get_contents($link);
    $html = str_replace("\n", "", $html);
    $html = preg_replace('/<a/i', "\n<a", $html);
    $html = preg_replace('/<\/a>/', "</a>\n", $html);
    preg_match_all('/<a\s*.*>.*?<\/a>/', $html, $matches);
    return($matches);
}


在这个例子中,我们想用file_get_contents来取得一个网页的内容。然后用str_replace("\n", "", $html)把所有的换行去掉。再用preg_replace('/<a/i', "\n<a", $html)和preg_replace('/<\/a>/', "</a>\n", $html)来把所有的<a href=".....">.....</a>模式另起一行。最后就用preg_match_all('/<a\s*.*>.*?<\/a>/', $html, $matches)匹配链接模式。/<a\s*.*>.*?<\/a>/就是匹配<a href=".....">.....</a>这种模式的正则表达式。那我们为什么要把<a href=".....">.....</a>链接另起一行呢??因为在/<a\s*.*>.*?<\/a>/模式中,.*是不能匹配换行的,所以就如<a>和</a>不在同一行就不能匹配了!!所以我们要这样做!


function huanImg(num)
{  
    var imgsrc = $('#small_' + num).attr('lang');

    $('#list_big').attr('src',imgsrc);

}


左边小图列表:
<li><a href="javascript:void(0)" onclick = "huanImg('1')"><img id="small_1" src="/data/72/mini_372647693_uploadFile1_20100202_122357_1.jpg" lang="/data/72/372647693_uploadFile1_20100202_122357_1.jpg" /></a></li>


<li><a href="javascript:void(0)" onclick = "huanImg('2')"><img id="small_2" src="/data/72/mini_372647693_uploadFile2_20100202_122357_1.jpg" lang="/data/72/372647693_uploadFile2_20100202_122357_1.jpg" /></a></li>



<li><a href="javascript:void(0)" onclick = "huanImg('3')"><img id="small_3" src="/data/72/mini_372647693_uploadFile3_20100202_122357_1.jpg" lang="/data/72/372647693_uploadFile3_20100202_122357_1.jpg" /></a>


右边大图展现:

<div class="center_img"><img width="307" height="306" src="/data/72/372647693_uploadFile1_20100202_122357_1.jpg" id="list_big"></div>
常常需要比较时间,如几点比几点大,这儿用一个简单的方法比较:
需要比较:
二月七日凌晨到下午二点的时间不让用户领取奖品的比较,如下:


$nowDate=mktime(date('H'),date('i'),date('s'),date('m'),date('d'),date('Y'));

                $day = date("d");
    if($day == 7)

    {
    //第一天 2月7日
        $forbidden_begin = mktime(0,0,0,2,7,2010);//开始时间
        $forbidden_end = mktime(14,0,0,2,7,2010);//结束时间
        if(($nowDate>=$forbidden_begin)&&($nowDate<=$forbidden_end))
        {          
           return array('code'=>-1,'awardleft'=>0,'message'=>'兑换时间已过,敬请期待今日14点的机会哦!');
        }
    }

我友,男,28岁成婚,之后就发生了一个很俗套的故事——认识了另一个女孩。  打碎一个婚姻之难,凡是入过围城的人都会深有体会。总之,他经过了4年的艰难历程,用他的话说就像是死过了一回之后,终于争取到了他以为的爱。朋友们也从对他进行道德批判转而佩服他的勇气。毕竟,在这个流行家中红旗不倒、外面彩旗飘飘的年月,能为爱出走,也是稀少而可贵的。  

  可是,他的爱情神话在再婚后两年,就已经有了破裂的迹象。曾经的激情被平庸的生活取代,而更糟糕的是,他发现自己开始越来越频繁地想到前妻。可是,在他第一次离婚的时候,在民风纯朴的当地,就已经成了千夫所指,难道他还有勇气第二次离婚吗?更何况,他还有何面目再去告诉前妻:我还是爱你的。  
阅读全文
对于PHP页面,以下是代码片段,实践OK:


解释:
PHP页面强制浏览器不缓存的方法:
    (1)告诉客户端浏览器不使用缓存,HTTP 1.1 协议。
    header("Cache-Control: no-cache, must-revalidate");

    (2)告诉客户端浏览器不使用缓存,兼容HTTP 1.0 协议。
    header("Pragma: no-cache");

    (3)设置此页面的过期时间(用格林威治时间表示),只要是已经过去的日期即可。
    header("Expires: Mon, 26 Jul 1970 05:00:00 GMT");

    (4)设置此页面的最后更新日期(用格林威治时间表示)为当天,可以强迫浏览器获取最新资料。
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");


参考:http://blog.sina.com.cn/s/blog_8002308e0100xrmv.html
ctrl + gf (跳转到文件)相对路径
ctrl + o   回到当前的文件

shift+ *   选择文本中的所有词

ctrl + N  补全单词

PHP JS 跳转

WEB2.0 jack 2010-2-1 11:24

echo '<script language="javascript" type="text/javascript">';
echo 'window.location.href="/con/activity/act/area"';
echo '</script>';
“陶朱公理财致富十二则”:
                 1、能识人,知人善恶,账目不负
                 2、能接纳,礼文接待,交关者众
                 3、能安业,厌故喜新,商贾大病
                 4、能整顿,货物整齐,夺人心目
                 5、能敏捷,犹豫不决,终归无成
                 6、能讨账,勤谨不怠,取讨自多
                 7、能用人,因才器使,任事有赖
                 8、能辩论,坐财有道,阐发愚蒙
                 9、能办货,置货不苛,添本便经
               10、能知机,售贮随时,可称名称
               11、能倡率,躬行以律,亲感自生
               12、能远数,多寡宽紧,酌中而行
新版本的php 降低错误级别:
配置php.ini
打开php.ini,把display_errors = Off 改成 display_errors = On
然后找到 error_reporting 最好设置成
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
然后保存,重启apache
service php-fpm restart
Gracefully shutting down php-fpm . done

写到日志里面去的配置:
log_errors = On
error_log = /data/logs/php/php-cli-error.log

光是:Error_reporting(E_ALL);还不行,还得:ini_set('display_errors','On');
error_reporting(E_ALL ^ E_NOTICE);ini_set('display_errors','On');





例子:

提示:
Warning: readfile(/tmp/up.php): failed to open stream: No such file or directory in /data/www/XXXX/up.php on line 54

于是整理好后:


下面是一个哥们写的博客:http://blog.linuxphp.org/archives/221/
php错误日志,适合异步调试和线上调试
ini_set("error_reporting",E_ALL ^ E_NOTICE);
ini_set("display_errors",off);
ini_set("log_errors",On);
ini_set("error_log","d:/c");
------------------附加两句解决错误的语句----------------------
@ini_set('memory_limit','500M');
@ini_set('max_execution_time', '180');

特别注意以下顺序才行,否则仍然不会报错的,哈哈:

如果是在linux terminal下运行,可以指定一个php.ini的配置文件,如下示例:

-c <path>|<file> Look for php.ini file in this directory

特别注意:
如果是包含关系的程序,包含好几个程序文件,如果再下级文件出现错误,而你仅仅在上级加入上面的两行,下级是不会报错的,于是还得在下级加入上面的两行才行,呵呵。真是麻烦,不过没办法,有时间线上故障,搬移线上服务,直接在线上调试的时候不得不这样,否则不会出现错误,很是郁闷,不知如何下手,有了这个麻烦事麻烦点,但是已经很好了!


小知识:获取ini里面的变量:
$_ENV['SERVER_TYPE'] = ini_get("phplib.servertype");

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这个是写在PHP.ini配置文件里的是:
display_errors = On
vi /usr/local/stow/php-5.2.5/lib/php.ini



error_get_last 救人老命,php就是高,哈哈 ,值得在线上调试的时候使用!

来自:来自:http://blog.csdn.net/shaobaojie/article/details/26934809
vi 中 shift + *  跳转到函数的实现处
    检讨一下自己,数据结构白学了,自己楞没做出来,晕!~今天想从两个数组里选出不同的来,自己倒腾了半天也不行,找了半天发现一个函数,真真的好用,(真是该挨打了,这个函数是从一篇06年的帖子里找到的,到现在还对很多函数不熟悉,真该找个时间好好看看),array_diff($q,$s),返回值是一个数组,是两个数组中不同的那些!
curl之CURLOPT_HTTPHEADER

单个

    <?php
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: Bytes=0-50\n"));
    ?>
多个

    <?php
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: Bytes=0-50\nOtherheader: stuff\n"));
    ?>


我们在不设置host的时候提交到虚拟主机后,会出现:


Tencent:/usr/local/tads/htdocs/mhxy2010hn.act/crontab # curl "http://172.23.129.11*/user_v3/freere*g.php?act_id=109353"
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /user_v3/freereg.php was not found on this server.</p>
</body></html>


设置host后就能找到了。

curl为我们用了CURLOPT_HTTPHEADER来做host的工作:



function curl_post($host, $data)
{

  $ch = curl_init();
  $res= curl_setopt ($ch, CURLOPT_URL,$host);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt ($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch,CURLOPT_HTTPHEADER,array("Host: act.*.qq.com"));

  $xyz = curl_exec ($ch);

  //echo $xyz;

  if ($xyz == NULL) {
       return 0;
  }

  return $xyz;

}



相当于:

172.23.129.*  act.*.qq.com


这样一折腾,就ok了,呵呵!
其实这个主要是解决,在线上有host指向了,但是其他的需哟又需要这个host的域名,而ip不同的情况。

—————————————————————————————————————————————————
用Curl直接模拟Host如下:

以上摘录自:http://jackxiang.com/post/4022/
在php中,抓取https的网站,会出现错误:

Warning: file_get_contents(https://localhost/myphp/a.asp) [function.file-get-contents]: failed to open stream: Invalid argument in I:\Web\myphp\a.php on line 16

打开php.ini找到 ;extension=php_openssl.dll ,去掉双引号";" ,重启web服务器即可。

apache的可以同时启用mod_ssl模块测试
最近在写PHP程序时,需要使浏览器在https和http之间转化,上网搜索相关信息,无奈只有最近在写PHP程序时,需要使浏览器在https和http之间转化,上网搜索相关信息,无奈只有一篇介绍用ASP实现“在http和https之间转化”的文章,于是只好行写了用PHP实现http与https转化的代码。
  如果网页使用https访问,在网页开头加入以下代码:
view plainprint?

   1. <?php  
   2. //http转化为https  
   3. if ($_SERVER["HTTPS"]<>"on")  
   4. {  
   5. $xredir="https://".$_SERVER["SERVER_NAME"].  
   6. $_SERVER["REQUEST_URI"];  
   7. header("Location: ".$xredir);  
   8. }  
   9. ?>  

<?php //http转化为https if ($_SERVER["HTTPS"]<>"on") { $xredir="https://".$_SERVER["SERVER_NAME"]. $_SERVER["REQUEST_URI"]; header("Location: ".$xredir); } ?>
  如果网页使用http访问,在网页开头加入以下代码:
view plainprint?

   1. <?php  
   2. //https转化为http  
   3. if ($_SERVER["HTTPS"]=="on")  
   4. {  
   5. $xredir="http://".$_SERVER["SERVER_NAME"].  
   6. $_SERVER["REQUEST_URI"];  
   7. header("Location: ".$xredir);  
   8. }  
   9. ?>  
直接用file_get_contents,会报错;
程序代码$url = (https://xxx.com");
file_get_contents($url);
错误:
程序代码Warning: file_get_contents(https://xxx.com) [function.file-get-contents]: failed to open stream: No such file or directory in D:wampwwwgrabber_clientindex.php on line 3
用curl的方式是可以的:
程序代码$url = (https://xxx.com);

重点是以下两句:

=============================================================
今天项目上线,使用php的curl模块通过https访问某个文件时出错:
     这是我日志里记录的信息:
2009-05-11 11:10:23 请求音频列表,错误号:60--错误描述:SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
哎,项目上线急阿,请教同事得知修改如下代码即可,添加黑体字部分就好了。
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->timeout);

虽然有些简单,但是还是写下来吧,以后好作参考。
// 对HTTPS网站的访问,用到了扩展库curl

要在PHP.ini中对curl的extension前面的分号去掉,可能还要把openssl的扩展同样打开
请问如何配置curl才能支持获取https网站内容或者向https的网站提交数据 ?
Linux下编译php的时候,把openssl支持一块编译进去
  --with-openssl[=DIR]    Include OpenSSL support (requires OpenSSL >= 0.9.6)
  --with-openssl-dir[=DIR]  FTP: openssl install prefix
  --with-imap-ssl[=DIR]    IMAP: Include SSL support. DIR is the OpenSSL install prefix
  --with-openssl-dir[=DIR]  SNMP: openssl install prefix
我一般自己编译,如果你的Linux发行版带有php5-openssl包,安装好就行了
如果是通过OpenSSL加密的https协议传输的网页,curl可以直接访问:
  curl https://that.secure.server.com
window下的https 通过curl访问的配置:
http://618119.com/archives/2007/10/26/16.html
http://hi.baidu.com/kkwtre/blog/item/3d20fbfb9a90da204e4aea01.html
http://www.enet.com.cn/article/2011/0617/A20110617874334.shtml




















=-----------------------------------------------------------------------------------------=
PHP CURL HTTPS POST:
分页: 202/338 第一页 上页 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 下页 最后页 [ 显示模式: 摘要 | 列表 ]