魏长东

weichangdong

正在查看: php 分类下的文章(第 3 页 / 共 94 篇)

simple_html_dom php操作html元素

<?php

include "simple_html_dom.php" ;
// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');

// Find all images 
foreach($html->find('img') as $element) 
       echo $element->src . '<br>';

// Find all links 
foreach($html->find('a') as $element) 
       echo $element->href . '<br>';
// Create DOM from URL
$html = file_get_html('http://slashdot.org/');

// Find all article blocks
foreach($html->find('div.article') as $article) {
    $item['title']     = $article->find('div.title', 0)->plaintext;
    $item['intro']    = $article->find('div.intro', 0)->plaintext;
    $item['details'] = $article->find('div.details', 0)->plaintext;
    $articles[] = $item;
}

print_r($articles);
// Create DOM from string
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');

$html->find('div', 1)->class = 'bar';

$html->find('div[id=hello]', 0)->innertext = 'foo';

echo $html; // Output: <div id="hello">foo</div><div id="world" class="bar">World</div>

»»阅读全文

php osa系统日期大于或小于查询

其实也不算是优化,就是做了点小小的修改。原有的mysql操作类文件 Medoo.class.php,不支持这种情景

当你的数据表的字段是date类型的(当然现在基本把时间都存成int型了,我存成date类型是有特殊用途),你查询的时候没法大于或者小于某一个日期,但是大于小于同时用没问题。就是下面的代码,当开始或者结束时间一个为空,是没法实现预期目的的。

public static function getCountByInfo($push_start_time='',$push_end_time='',$category='')
        {
                $condition = [];
                $sub_condition = array();
                if ($push_start_time && !$push_end_time) {
                        $sub_condition["push_time[>=]"] = $push_start_time;
                } elseif (!$push_start_time && $push_end_time) {
                        $sub_condition["push_time[<=]"] = $push_end_time;
                } elseif ($push_start_time && $push_end_time){
                        $sub_condition["push_time[<>]"] =array($push_start_time,$push_end_time);
                }
                if ($category) {
                        $sub_condition['category'] = $category;
            }

                if(empty($sub_condition)){
                        $condition = [];
                }else{
                        $condition["AND"] = $sub_condition;
                }
                $db=self::__instance();
                $count = $db->count(self::getTableName(), $condition);
                return $count;
        }

»»阅读全文

php捕捉错误,不让程序断掉

有时候遇到代码有一些异常,但是不想他退出执行,就用try catch的形式来捕捉。

 

今天高考,送个祝福

gaokao-11.jpg

<?php
function inverse($x) {
    if (!$x) {
        throw new Exception('Division by zero'.PHP_EOL);
    }
    return 1/$x;
}

set_exception_handler('exception_handler');
try {
    echo inverse(5) . "\n";
    echo inverse(0) . "\n";
    echo inverse(4) . "\n";
} catch(\Exception $e){
	echo  $e->getMessage();
}
function exception_handler($e)
{
	echo  'wcd=='.$e->getMessage();
}

for ($i=-3;$i<10;$i++){
	try {
		echo  inverse($i)."\n";
	} catch (\Exception $e) {
		 echo  $e->getMessage()."\n";	
		continue;
	}
}
// Continue execution
//echo inverse(0) . "\n"; 如果加上这句 就走set_exception_handler 指定的捕捉机制了 就会断掉 就不会输出最后的 hell world
echo "Hello World\n";
?>

php多进程code

看到一个大神写的php多进程的代码,自己稍作修改,放着以后备用。

插播一个nginx的配置,之前一直以为nginx不能直接返回状态码,需要借助lua来实现呢,原来nginx本身也是可以滴。

server {
    listen 81;
    server_name 127.0.0.1;
    access_log off;
    add_header Content-Type "application/json;charset=utf-8";
    return 200 '{"retcode":0}';
}

»»阅读全文

使用 Nginx 和 GeoIP 模块来处理不同国家的访问

http://www.geoip.co/

安装 Nginx

因为要用到 http_geoip_module 模块,系统自带的 nginx 一般不带这个模块,所以要下载 nginx 源代码后自行编译:

# wget http://nginx.org/download/nginx-0.9.6.tar.gz
# tar zxvf nginx-0.9.6.tar.gz
# cd nginx-0.9.6
# ./configure --without-http_empty_gif_module --with-poll_module \
--with-http_stub_status_module --with-http_ssl_module \
--with-http_geoip_module
# make; make install

»»阅读全文

编译安装的php-fpm重启

看到这个题目可能觉得小儿科,但是我觉得还是有必要记下。

编译安装的环境,没法通过service 重启,也没法通过/etc/rc.d/init.d/ 重启,只好杀了重新执行命令。

但是执行命令有不好找命令,不行nginx一样,直接就执行 /usr/local/nginx/sbin/nginx(当前我的一个机子环境上)。

所以kill -s SIGUSR2  pid 这种重启方法挺好的,kill -SIGUSR2 pid,不加-s也可以。linux man的解释是这样的:

 -s, --signal signal
              Specify the signal to send.  The signal may be given as a signal name or number.
 

php获取apk包信息的方法

/*解析安卓apk包中的压缩XML文件,还原和读取XML内容 依赖功能:需要PHP的ZIP包函数支持。*/
 
include('./Apkparser.php');
$appObj  = new Apkparser();
 $targetFile = a.apk;
//apk所在的路径地址
$res = $appObj->open($targetFile);
$appObj->getAppName();     // 应用名称
$appObj->getPackage();    // 应用包名
$appObj->getVersionName();  // 版本名称
 $appObj->getVersionCode();  // 版本代码
Apkparser.php 文件


下载地址 http://cdn.weichangdong.com/ApkParser.class.php

»»阅读全文

一次php进程诡异退出的排查过程

出现了一个诡异的事情。离线扫描部分会有一个常驻的php进程,以便处理发现的垃圾信息。常驻的php进程总是诡异的退出。php代码示例如下:

<?php
while(1){
  $content = fgets(STDIN);
  if(empty($content)){
    sleep(1);
  }
  //逻辑处理部分代码省略
}
?>

»»阅读全文

妙用php中的register_shutdown_function和fastcgi_finish_request

在php中又两个方法都是在请求快结束的时候执行。方法名分别是 register_shutdown_function和fastcgi_finish_request。虽然执行的时机差不多,但是功能和应用场景不一样。比较两个方法的区别不是本文的重点。本文的重点的说明两个方法的应用场景。

»»阅读全文