海运的博客

PHP trim数组

发布时间:October 16, 2015 // 分类:PHP // No Comments

<?php
//方法1
function trim_array($input) {
  if (!is_array($input))
    return trim($input);
  return array_map('trim_array', $input);
}
$Array = trim_array($Array);
//方法2
function trim_value (& $value ) { 
  if (!is_array($value)) {
    $value  =  trim ( $value ); 
    return;
  }
  array_walk ( $value ,  'trim_value' );
}
array_walk ($Array,  'trim_value' );

Selenium处理验证码

发布时间:September 20, 2015 // 分类:PHP,iMacros // No Comments

截取整个屏幕,获取验证码坐标及大小,然后再截取验证码:

<?php
$element = $webDriver->findElement(
  WebDriverBy::id('J-checkcode-img')
);
$element_width = $element->getSize()->getWidth();
$element_height = $element->getSize()->getHeight();
 
$element_src_x = $element->getLocation()->getX();
$element_src_y = $element->getLocation()->getY();
 
$webDriver->takeScreenshot('screenshot.png');
$src = \imagecreatefrompng('screenshot.png');
$dest = \imagecreatetruecolor($element_width, $element_height);
 
imagecopy($dest, $src, 0, 0, $element_src_x, $element_src_y, $element_width, $element_height);
imagepng($dest, './captcha.png');

PHP多多线程pthreads数据共享

发布时间:June 19, 2015 // 分类:PHP // No Comments

<?php
class sharr extends Stackable {
  public function run(){}
}

class shvar extends Stackable  {
  public $num = 1;

}

class my extends Thread {

  public function __construct($sharr, $shvar) {
    $this->sharr = $sharr; 
    $this->shvar = $shvar; 
  }

  public function run(){
    $i = 0;
    while(++$i < 10) {
      $this->sharr[]=rand(0,1000);
      $this->shvar->num++;
    }
    var_dump($this->sharr);
    var_dump($this->shvar->num);
  } 
}

$sharr = new sharr();
$shvar = new shvar();
$my = new my($sharr, $shvar);
$my->start();
$my->join();

var_dump($sharr);
var_dump($shvar->num);
?>

PHP多线程pthreads使用

发布时间:March 26, 2015 // 分类:PHP // No Comments

<?php
declare(ticks = 1);
$running = 1;

//信号处理函数
function sig_handler($signo)
{
  switch ($signo) {
  case SIGINT:
    finish();
    break;
  default:
    break;
  }
}

pcntl_signal(SIGINT, "sig_handler");
class test extends \Thread {
  public $url;
  public $result;

  public function __construct($url) {
    $this->url = $url;
  }

  public function run() {
    if ($this->url) {
      $this->result = model_http_curl_get($this->url);
    }
  }
}
function model_http_curl_get($url) {
  $curl = curl_init();  
  curl_setopt($curl, CURLOPT_URL, $url);  
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
  curl_setopt($curl, CURLOPT_TIMEOUT, 5);  
  curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)');  
  $result = curl_exec($curl);  
  curl_close($curl);  
  return $result;  
}
for ($i = 0; $i < 500; $i++) {
  $urls[] = 'http://www.baidu.com/s?wd='. rand(10000, 20000);
}

$pool = array();
for ($i=1;$i<=5;$i++) {
  $key = uniqid();
  $url = array_shift($urls);
  $pool[$key] = new test($url);
  $pool[$key]->start();
  echo "启动线程$key\n";
}
while ($urls && $running) {
  foreach ($pool as $key=>$worker) {
    if(! $worker->isRunning()){
      //unset($pool[$key]);
      echo "线程".$key."已结束\n";
      $url = array_shift($urls);
      $pool[$key] = new test($url);
      $pool[$key]->start();
      echo "启动线程$key\n";
    }
  }
  usleep(1000);
}

function finish() {
  global $running;
  global $pool;
  $running = 0;
  echo "接收到信号,等待运行中线程结束\n";
  foreach ($pool as $key=>$worker) {
    if ($pool[$key]->join()) {
      var_dump($pool[$key]->result);
    }
  }
}

PHP通过v8/nodejs/spidermonkey调用执行js函数

发布时间:March 13, 2015 // 分类:PHP // No Comments

通过v8,windows下需自行编译:

d8 a.js -- a b c
d8 a.js --js-arguments a b c

获取参数:

print(arguments[0]);

通过spidermonkey,获取参数同上:

js a.js a b c

通过Nodejs,底层基于v8,官网有windows安装包:

node a.js a b c

获取命令参数:

var arguments = process.argv.splice(2);
console.log(arguments[1]);

v8和spidermonkey都有相应的php扩展,在windows下通过进程调用执行js并获取结果:

<?php
$lastline = exec("node a.js aa bb", $res, $ret);
print_r($res);
echo $lastline;
echo $ret;
分类
最新文章
最近回复
  • opnfense: 谢谢博主!!!解决问题了!!!我之前一直以为内置的odhcp6就是唯一管理ipv6的方式
  • liyk: 这个方法获取的IPv6大概20分钟之后就会失效,默认路由先消失,然后Global IPV6再消失
  • 海运: 不好意思,没有。
  • zongboa: 您好,請問一下有immortalwrt設定guest Wi-Fi的GUI教學嗎?感謝您。
  • 海运: 恩山有很多。
  • swsend: 大佬可以分享一下固件吗,谢谢。
  • Jimmy: 方法一 nghtp3步骤需要改成如下才能编译成功: git clone https://git...
  • 海运: 地址格式和udpxy一样,udpxy和msd_lite能用这个就能用。
  • 1: 怎么用 编译后的程序在家里路由器内任意一台设备上运行就可以吗?比如笔记本电脑 m参数是笔记本的...
  • 孤狼: ups_status_set: seems that UPS [BK650M2-CH] is ...