<?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' );
PHP trim数组
发布时间:October 16, 2015 // 分类:PHP // No Comments
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;
分类
- Apache (13)
- Nginx (45)
- PHP (86)
- IIS (8)
- Mail (17)
- DNS (16)
- Cacti (14)
- Squid (5)
- Nagios (4)
- Puppet (7)
- CentOS (13)
- Iptables (23)
- RADIUS (3)
- OpenWrt (41)
- DD-WRT (1)
- VMware (9)
- 网站程序 (2)
- 备份存储 (11)
- 常用软件 (20)
- 日记分析 (10)
- Linux基础 (18)
- 欧诺代理 (0)
- Linux服务 (18)
- 系统监控 (4)
- 流量监控 (7)
- 虚拟化 (28)
- 伪静态 (2)
- LVM (3)
- Shell (18)
- 高可用 (2)
- 数据库 (16)
- FreeBSD (3)
- 网络安全 (25)
- Windows (35)
- 网络工具 (22)
- 控制面板 (3)
- 系统调优 (10)
- Cisco (3)
- VPN (6)
- ROS (20)
- Vim (14)
- KMS (4)
- PXE (2)
- Mac (1)
- Git (1)
- PE (1)
- LNS (2)
- Xshell (7)
- Firefox (13)
- Cygwin (4)
- OpenSSL (9)
- Sandboxie (3)
- StrokesPlus (1)
- AutoHotKey (4)
- Total Commander (3)
- WordPress (3)
- iMacros (6)
- Typecho (2)
- Ollydbg (1)
- Photoshop (1)
- 正则 (3)
- Debian (3)
- Python (8)
- NoSQL (6)
- 消息队列 (4)
- JS (7)
- Tmux (3)
- GO (7)
- HHVM (2)
- 算法 (1)
- Docker (2)
- PT (15)
- N1 (16)
- K2P (6)
- LUKS (4)
最新文章
- 光猫拨号ImmortalWrt/OpenWRT路由获取ipv6遇到的问题
- php-fpm错误error_log日志配置
- debian-12/bookworm安装mariadb10.3和mysql5.6
- smokeping主从配置及遇到的问题
- openwrt/linux使用tcpdump/nflog ulogd记录iptables日志
- tmux bash shell自动保存history
- ImmortalWrt/OpenWRT为guest wifi网络配置ipv6 nat6
- PVE更新upgrade遇到The following packages have been kept back
- openwrt/immortalwrt修改odhcpd ipv6 preferred_lifetime和valid_lifetime
- golang版本udpxy iptv rtp多播转http单播
最近回复
- 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 ...