Tagged: PHP Toggle Comment Threads | 键盘快捷键

  • Jason Lin 11:27 pm on December 2, 2019 链接地址 | 回复
    Tags: , PHP   

    PHP PECL 扩展库安装 

    https://pecl.php.net/

    PECL is a repository for PHP Extensions, providing a directory of all known extensions

    搜索下载对应的PHP扩展库原码
    #如果不安装php-devel就不会有phpize和php-config

    /usr/bin/phpize              # php安装后的路径(不知道位置的可以whereis phpize 查看位置)
    ./configure --with-php-config=/usr/bin/php-config
    make && make install

    修改php.ini文件 , 增加如下内容:

    extension=XXX.so  #增加对应的扩展库名

    重启php-fpm: 或httpd

    systemctl restart php-fpm
    OR
    systemctl restart httpd
     
  • Jason Lin 11:01 pm on March 6, 2016 链接地址 | 回复
    Tags: , PHP   

    pkgs.org – Linux Packages Search 

    pkgs.org – Linux Packages Search

    The pkgs.org is created to provide you with the simplest method of searching and downloading
    the newest versions of the Linux packages without the usual excessive popups or spyware.

    今天发现了个好网站,LINUX RPM包的全库,包函了各大LINUX版本,几乎所有的常用包,测试可用,很方便安装

     

     
  • Jason Lin 10:07 pm on November 2, 2015 链接地址 | 回复
    Tags: , PHP   

    XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin 

    解决办法:
    1.恳求的url是PHP的,须要PHP中

    echo header(“Access-Control-Allow-Origin: *”);

    2.html的,须要在head头加

    <meta http-equiv=”Access-Control-Allow-Origin” content=”*”>



    这样就可以解决Ajax跨域访问问题。

     
  • Jason Lin 2:21 pm on August 6, 2015 链接地址 | 回复
    Tags: PHP   

    在RHEL/CentOS 6.3/5.6和Fedora 17/12上安装APC(可选的PHP缓存) 

    在RHEL/CentOS 6.3/5.6和Fedora 17/12上安装APC

    APC(可选的PHP缓存)是一个免费,开源的PHP代码缓存。这个模块的主要目的是提供一个健壮的框架来缓存和优化PHP代码。

    在RHEL/CentOS 6.3/5.6和Fedora 17/12上安装APC

    在Linux上安装和开启PHP APC

    该说明文档描述了如何在RHEL 6.3/6.2/6.1/6/5.8/5.6,CentOS 6.3/6.2/6.1/6/5.8/5.6Fedora 17,16,15,14,13,12上使用PECL命令从代码仓库中下载,安装以及开启APC

    安装APC的依赖包

    首先,我们需要安装所需的软件包,pecl,phpize和apxs命令,并使用YUM包管理工具来安装APC。

    yum install php-pear php-devel httpd-devel pcre-devel gcc make

    使用PECL安装APC

    现在我们已经安装了所有必须的软件包以用来安装APC。接下来我们使用PECL命令来安装它。安装过程中请选择默认的设置值。

    pecl install apc

    输出如下:
    WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
    downloading APC-3.1.9.tgz ...
    Starting to download APC-3.1.9.tgz (155,540 bytes)
    .................................done: 155,540 bytes
    54 source files, building
    running: phpize
    Configuring for:
    PHP Api Version:         20090626
    Zend Module Api No:      20090626
    Zend Extension Api No:   220090626
    config.m4:180: warning: AC_CACHE_VAL(PHP_APC_GCC_ATOMICS, ...): suspicious cache-id, must contain _cv_ to be cached
    ../../lib/autoconf/general.m4:1974: AC_CACHE_VAL is expanded from...
    ../../lib/autoconf/general.m4:1994: AC_CACHE_CHECK is expanded from...
    config.m4:180: the top level
    config.m4:180: warning: AC_CACHE_VAL(PHP_APC_GCC_ATOMICS, ...): suspicious cache-id, must contain _cv_ to be cached
    ../../lib/autoconf/general.m4:1974: AC_CACHE_VAL is expanded from...
    ../../lib/autoconf/general.m4:1994: AC_CACHE_CHECK is expanded from...
    config.m4:180: the top level Enable internal debugging in APC [no] : Enable per request file info about files used from the APC cache [no] : Enable spin locks (EXPERIMENTAL) [no] : Enable memory protection (EXPERIMENTAL) [no] : Enable pthread mutexes (default) [yes] : Enable pthread read/write locks (EXPERIMENTAL) [no] :

    开启PHP的APC扩展模块

    运行下面的命令以开启APC扩展模块在Apache配置中

    echo "extension=apc.so" > /etc/php.d/apc.ini

    重启Apache服务

    重启Apache服务以使新的更改生效。

    service httpd restart
    OR
    /etc/init.d/httpd restart
    
    

    在RHEL/CentOS 6.3/5.6和Fedora 17/12上安装APC

    开启PHP APC管理

    开启APC管理面板,你需要复制下面的文件:

    cp /usr/share/pear/apc.php /var/www/html/

    接下来打开apc.php文件

    # vi /var/www/html/apc.php

    如下所示,在apc.php文件中设置用户名及密码。

    defaults('ADMIN_USERNAME','apc');       // Admin Username
    defaults('ADMIN_PASSWORD','Set-Password-Here');  // Admin Password - CHANGE THIS TO ENABLE!!!

    在浏览器中输入如下的URL链接,你将可以使用APC的管理面板。

    http://localhost/apc.php
    
    

    在RHEL/CentOS 6.3/5.6和Fedora 17/12上安装APC

    使用PECL升级APC

    执行如下的命令即可下载并升级APC

    pecl upgrade apc

    使用PECL卸载APC

    如果你想移除它,使用如下的命令即可从你的系统中完全移除APC。

    pecl uninstall apc
     
  • Jason Lin 11:13 am on June 3, 2015 链接地址 | 回复
    Tags: , PHP   

    cURL超时设置 

    一般我们访问HTTP方式很多,主要是:curl, socket, file_get_contents() 等方法。
    如果碰到对方服务器一直没有响应的时候,我们就悲剧了,很容易把整个服务器搞死,所以在访问http的时候也需要考虑超时的问题。

    CURL 是我们常用的一种比较靠谱的访问HTTP协议接口的lib库,性能高,还有一些并发支持的功能等。

    curl_setopt($ch, opt) 可以设置一些超时的设置,主要包括:
    *(重要) CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数。
    *(重要) CURLOPT_TIMEOUT_MS 设置cURL允许执行的最长毫秒数。
    (在cURL 7.16.2中被加入。从PHP 5.2.3起可使用)

    CURLOPT_CONNECTTIMEOUT 在发起连接前等待的时间,如果设置为0,则无限等待。
    CURLOPT_CONNECTTIMEOUT_MS 尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。
    (在cURL 7.16.2中被加入。从PHP 5.2.3开始可用)

    CURLOPT_DNS_CACHE_TIMEOUT 设置在内存中保存DNS信息的时间,默认为120秒。

    curl普通秒级超时:

    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL,$url);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
    curl_setopt($ch, CURLOPT_TIMEOUT,60);   //只需要设置一个秒的数量就可以  
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);  
    curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars['HTTP_USER_AGENT']);  
    

    curl如果需要进行毫秒超时,需要增加:

    curl_easy_setopt(curl, CURLOPT_NOSIGNAL,1L);  
    //或者是:  
    curl_setopt ( $ch,  CURLOPT_NOSIGNAL,true);//是可以支持毫秒级别超时设置的  
    

    curl一个毫秒级超时的例子:

    if(!isset($_GET['foo'])){  
            // Client  
            $ch = curl_init('http://example.com/');  
            curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);  
            curl_setopt($ch, CURLOPT_NOSIGNAL,1);    //注意,毫秒超时一定要设置这个  
            curl_setopt($ch, CURLOPT_TIMEOUT_MS,200);  //超时毫秒,cURL 7.16.2中被加入。从PHP 5.2.3起可使用  
            $data = curl_exec($ch);  
            $curl_errno = curl_errno($ch);  
            $curl_error = curl_error($ch);  
            curl_close($ch);  
       
            if($curl_errno >0){  
                    echo "cURL Error ($curl_errno): $curl_error\n";  
            }else{  
                    echo "Data received: $data\n";  
            }  
    }else{  
            // Server  
            sleep(10);  
            echo "Done.";  
    }  
    

    其他一些技巧:
    1. 按照经验总结是:cURL 版本 >= libcurl/7.21.0 版本,毫秒级超时是一定生效的,切记。
    2. curl_multi的毫秒级超时也有问题。。单次访问是支持ms级超时的,curl_multi并行调多个会不准

     
  • Jason Lin 9:35 pm on May 8, 2015 链接地址 | 回复
    Tags: , PHP   

    验证URL字符串的正则 

    验证URL字符串的正则

    ^(((file|gopher|news|nntp|telnet|http|ftp|https|ftps|sftp)://)|(\w+\.))*(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[\d]+)?(/[\w\&%_\./-~-\W]*)?$
    

    在PHP中的写法为:

    if(preg_match("@^(((file|gopher|news|nntp|telnet|http|ftp|https|ftps|sftp)://)|(\w+\.))*(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[\d]+)?(/[\w\&%_\./-~-\W]*)?$@i", $_url))
    
     
    • Jason Lin 10:37 下午 on 五月 8, 2015 链接地址 | 回复

      if(!preg_match(“@^((file|gopher|news|nntp|telnet|http|ftp|https|ftps|sftp)://)@i”, $_url))
      判断是否有http打头

  • Jason Lin 4:27 pm on April 28, 2015 链接地址 | 回复
    Tags: PHP   

    POST调试工具 

    实际开发工作中,很多时候需要用到POST提交值,每次都需要针对写出相对的POST环境,

    所以写出这个POST调试工具公共库,方便调试使用。

    程序运行环境需要php 及 extension=php_curl.dll

    调试时填写的内容:

    提交的网址:填写需要调试的网址

    提交的变量:分别填写变量名及变量值,可以添加多个变量,及多行(TEXT)变量

    提交执行提供了正常执行,返回原码,解析JSON,解析XML 多种操作

    可以将返回直接显示,也可以解析后直观显示

    在线运行:http://www.zhisg.com/post.php

    post调试工具下载

     
  • Jason Lin 5:39 pm on March 23, 2015 链接地址 | 回复
    Tags: , PHP   

    PHP字符串提取一段文字中的img代码 

    哈哈!”';
    echo $str;
    preg_match_all('//iUs', $str, $out);
    print_r($out);
    
    $img=$out[0][0];
    echo $img;
    ?>
    


    哈哈”';
    
    preg_match_all('/src="(.*)"/iUs', $str, $out);
    
    $img=$out[1][0];
    echo $img;
    ?>
    
     
  • Jason Lin 12:02 pm on August 8, 2014 链接地址 | 回复
    Tags: PHP   

    Imghash:相似图片搜索的php实现 

    前几天看到阮一峰的博客里写到关于相似图片搜索的原理, 里面介绍了Google相似图片搜索的大致原理,主要是从Neal Krawetz博士的LOOKS LIKE IT翻译而来。文章详细的介绍了相似图片搜索处理的相关步骤,并且给出了一个python的实现,由于我对PHP比较熟,所以写了个PHP的版本。
    图片相似搜索的简单原理
    根据文章里的描述,其实原理比较简单,大致有如下几个步骤:

    1、缩小尺寸。将图片缩小到8×8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。

    2、简化色彩。将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。

    3、计算平均值。计算所有64个像素的灰度平均值。

    4、比较像素的灰度。将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。

    5、计算哈希值。将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。得到指纹以后,就可以对比不同的图片,看看64位中有多少位是不一样的。

    这种算法的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更。实际应用中,往往采用更强大的pHash算法和SIFT算法,它们能够识别图片的变形。只要变形程度不超过25%,它们就能匹配原图。

    图片相似搜索的PHP实现
    原文中给出了一个python版本的实现,代码只有53行。我写了个对应的PHP版本,由于直接是用类写的,所以代码有100行,具体如下:

    class Imghash{
    	
    	private static $_instance = null;
    	
    	public $rate = 2;
    	
    	public static function getInstance(){
    		if (self::$_instance === null){
    			self::$_instance = new self();
    		}
    		return self::$_instance;
    	}
    	public function run($file){
    		if (!function_exists('imagecreatetruecolor')){
    			throw new Exception('must load gd lib', 1);
    		}
    		$isString = false;
    		if (is_string($file)){
    			$file = array($file);
    			$isString = true;
    		}
    		$result = array();
    		foreach ($file as $f){
    			$result[] = $this->hash($f);
    		}
    		return $isString ? $result[0] : $result;
    	}
    	public function checkIsSimilarImg($imgHash, $otherImgHash){
    		if (file_exists($imgHash) && file_exists($otherImgHash)){
    			$imgHash = $this->run($imgHash);
    			$otherImgHash = $this->run($otherImgHash);
    		}
    		if (strlen($imgHash) !== strlen($otherImgHash)) return false;
    		$count = 0;
    		$len = strlen($imgHash);
    		for($i=0;$i<$len;$i++){
    			if ($imgHash{$i} !== $otherImgHash{$i}){
    				$count++;
    			}
    		}
    		return $count <= (5 * $rate * $rate) ? true : false;
    	}
    	public function hash($file){
    		if (!file_exists($file)){
    			return false;
    		}
    		$height = 8 * $this->rate;
    		$width = 8 * $this->rate;
    		$img = imagecreatetruecolor($width, $height);
    		list($w, $h) = getimagesize($file);
    		$source = $this->createImg($file);
    		imagecopyresampled($img, $source, 0, 0, 0, 0, $width, $height, $w, $h);
    		$value = $this->getHashValue($img);
    		imagedestroy($img);
    		return $value;
    	}
    	public function getHashValue($img){
    		$width = imagesx($img);
    		$height = imagesy($img);
    		$total = 0;
    		$array = array();
    		for ($y=0;$y<$height;$y++){
    			for ($x=0;$x<$width;$x++){
    				$gray = ( imagecolorat($img, $x, $y) >> 8 ) & 0xFF;
    				if (!is_array($array[$y])){
    					$array[$y] = array();
    				}
    				$array[$y][$x] = $gray;
    				$total += $gray;
    			}
    		}
    		$average = intval($total / (64 * $this->rate * $this->rate));
    		$result = '';
    		for ($y=0;$y<$height;$y++){
    			for ($x=0;$x<$width;$x++){
    				if ($array[$y][$x] >= $average){
    					$result .= '1';
    				}else{
    					$result .= '0';
    				}
    			}
    		}
    		return $result;
    	}
    	public function createImg($file){
    		$ext = $this->getFileExt($file);
    		if ($ext === 'jpeg') $ext = 'jpg';
    		$img = null;
    		switch ($ext){
    			case 'png' : $img = imagecreatefrompng($file);break;
    			case 'jpg' : $img = imagecreatefromjpeg($file);break;
    			case 'gif' : $img = imagecreatefromgif($file);
    		}
    		return $img;
    	}
    	public function getFileExt($file){
    		$infos = explode('.', $file);
    		$ext = strtolower($infos[count($infos) - 1]);
    		return $ext;
    	}
    }
    
    require_once “Imghash.class.php”;
    $instance = ImgHash::getInstance();
    $result = $instance->checkIsSimilarImg(‘chenyin/IMG_3214.png’, ‘chenyin/IMG_3212.JPG’);

    如果$result值为true, 则表明2个图片相似,否则不相似。

    在实际的相似图片搜索中,算图片的指纹并不是难点,难点而是在怎么从海量的图片指纹里找出与之相似的指纹。

     
  • Jason Lin 10:55 am on July 24, 2014 链接地址 | 回复
    Tags: PHP   

    Apache2.2整合PHP5.3以上的版本时提示错误Cannot load php5apache2_2.dll into server解决方法 

    Apache2.2整合PHP5.3以上的版本时提示错误“Cannot load php5apache2_2.dll into server ”

    故障现象:
      在命令符方式下启动Apache时提示错误信息“httpd: Syntax error on line 129 of D:/serviceRoot/Apache2.2/conf/httpd.conf: Cannot load D:/serviceRoot/PHP5.4.3/php5apache2_2.dll into server”,导致Apache无法启动。
      Apache的配置文件D:/Apache/conf/httpd.conf 第129行内容为:
      LoadModule php5_module D:/serviceRoot/PHP5.4.3/php5apache2_2.dll
      注意:其中D:/serviceRoot/PHP5.4.3/php5apache2_2.dll是我安装php的相应路径。Apache为2.2.22版本,php为5.4.3版本。

    出现错误的原因:
      在网上查到一位朋友遇到类似情况,并提示根据PHP的安装文件名称“php-5.3.6-Win32-VC9-x86.zip”得知该版本的PHP安装文件是由VC编译完成的,因此如需要运行或调用该PHP压缩包中的相关文件,则需要首先安装VC的运行时环境。如果你的机器没有安装有VC运行时环境,则Apache调用该PHP压缩包中的相关文件时会提示如上错误信息。

    解决方法:
      在网上搜索“VC2008可再发行组件”或者是“VC2008运行库”,下载安装后即可解决此故障。

     
  • Jason Lin 10:35 pm on July 23, 2014 链接地址 | 回复
    Tags: PHP   

    PHP 5.5 新增 Generators 特性 yield 标签 

    简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,php 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。

    function xrange($start, $limit, $step = 1) {
    for ($i = $start; $i <= $limit; $i += $step) { yield $i; } } echo 'Single digit odd numbers: '; /* 注意保存在内存中的数组绝不会被创建或返回 */ foreach (xrange(1, 9, 2) as $number) { echo "$number "; }
     
  • Jason Lin 9:12 pm on July 6, 2014 链接地址 | 回复
    Tags: PHP   

    PHP 查询两个字符串的相似度 

    PHP similar_text() 函数 : similar_text(string1,string2,percent)
    以及 levenshtein() 函数 : levenshtein(string1,string2,insert,replace,delete)
    两个函数可以计算出两个字符串的相似值,用此两个函数可以进行模糊查询,进行相似度查询。

    levenshtein() 函数返回两个字符串之间的 Levenshtein 距离。
    Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
    例如把 kitten 转换为 sitting:
    sitten (k→s)
    sittin (e→i)
    sitting (→g)
    levenshtein() 函数给每个操作(替换、插入和删除)相同的权重。不过,您可以通过设置可选的 insert、replace、delete 参数,来定义每个操作的代价。


    similar_text() 函数计算两个字符串的匹配字符的数目。
    该函数也可以计算两个字符串的相似度(以百分比计)。

    注释:levenshtein() 函数比 similar_text() 函数更快。不过,similar_text() 函数通过更少的必需修改次数提供更精确的结果。

     
  • Jason Lin 12:13 am on June 23, 2014 链接地址 | 回复
    Tags: PHP   

    Deprecated: Function ereg() is deprecated的解决方法 

    这个问题是因为你用的php版本过高。

    在php5.3中,正则函数ereg_replace已经废弃,而dedecms还继续用。有两个方案可以解决以上问题:

    1、把php版本换到v5.3下。

    2、继续使用v5.3,修改php.ini文件

    ;extension=php_mbstring.dll

    改为

    extension=php_mbstring.dll

    ;mbstring.func_overload = 0

    修改为:

    mbstring.func_overload = 7

    或者使用其他的函数:

    define(‘DEDEADMIN’, ereg_replace(“[/\\]{1,}”, ‘/’, dirname(__FILE__) ) );
    //改为
    define(‘DEDEADMIN’, preg_replace(“/[\/\\\\]{1,}/”, ‘/’, dirname(__FILE__) ) );

    注:因为preg_replace比ereg_replace的执行速度快,PHP推荐使用preg_replace.

     
  • Jason Lin 11:04 pm on June 22, 2014 链接地址 | 回复
    Tags: PHP   

    PHP 判断字符串是否为全英文,英汉混合,纯汉字方法 

    方法一:

    function is_chinese($s){
            $allen = preg_match("/^[^\x80-\xff]+$/", $s);   //判断是否是英文
            $allcn = preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/",$s);  //是否是中文
            if($allen){  
                  return 'allen';  
            }else{  
                  if($allcn){  
                       return 'allcn';  
                  }else{  
                       return 'encn';  
                  }  
            } 
       }
    

    方法二:
    利用Php的mb_strlen和strlen函数就可以轻松得知字符串的构成是全英文、英汉混合、还是纯汉字。简要说明如下(以上示例程序)
    1、如果strlen返回的字符长度和mb_strlen以当前编码计算的长度一致,可以判断是纯英文字符串。
    2、如果strlen返回的字符长度和mb_strlen以当前编码计算的长度不一致,且strlen返回值同mb_strlen的返回值求余后得0可以判断为是全汉字的字符串。
    3、如果strlen返回的字符长度和mb_strlen以当前编码计算的长度不一致,且strlen返回值同mb_strlen的返回值求余后不为0,可以判断为是英汉混合的字符串。

    function Check_stringType($str1) {
    	        $strA = trim($str1);
    	        $lenA = strlen($strA);
    	        $lenB = mb_strlen($strA, "utf-8");
    	        if ($lenA === $lenB) {
    	            return "1"; //全英文
    	        } else {
    	            if ($lenA % $lenB == 0) {
    	                return "2"; //全中文
    	            } else {
    	                return "3"; //中英混合
    	            }
    	       }
    	 }
    
     
c
Compose new post
j
Next post/Next comment
k
Previous post/Previous comment
r
回复
e
编辑
o
Show/Hide comments
t
Go to top
l
Go to login
h
Show/Hide help
shift + esc
取消