邢栋博客

邢栋博客,Action博客,记录工作和生活中的点点滴滴

php发送与接收流文件方法
<?php  
/** php 发送流文件 
* @param  String  $url  接收的路径 
* @param  String  $file 要发送的文件 
* @return boolean 
*/  
function sendStreamFile($url, $file){  
    if(file_exists($file)){  
        $opts = array(  
            'http' => array(  
                'method' => 'POST',  
                'header' => 'content-type:application/x-www-form-urlencoded',  
                'content' => file_get_contents($file)  
            )  
        );  
        $context = stream_context_create($opts);  
        $response = file_get_contents($url, false, $context);  
        $ret = json_decode($response, true);  
        return $ret['success'];  
    }else{  
        return false;  
    }  
}  
  
$ret = sendStreamFile('http://localhost/receiveStreamFile.php', 'send.txt');  
var_dump($ret);  


/** php 接收流文件 
* @param  String  $file 接收后保存的文件名 
* @return boolean 
*/  
function receiveStreamFile($receiveFile){  
    $streamData = file_get_contents('php://input');  
    if($streamData!=''){  
        $ret = file_put_contents($receiveFile, $streamData, true);  
    }else{  
        $ret = false;  
    }  
    return $ret;  
}  
$receiveFile = 'receive.txt';  
$ret = receiveStreamFile($receiveFile);  
echo json_encode(array('success'=>(bool)$ret));  
?>  
关于php类的析构函数


<?php
	class A
	{
		public $name = 'xd';
		function __construct($test='test'){
			echo 'construct->'.$test.'<br>';
		}
		function __destruct(){
			echo 'destruct->'.$this->name.'<br>';
		}
	}
	$a = new A('a');
	$a = null;
	$b = new A('b');
	echo 'helloxd';
?>



<!-- 

上面的结果是:
construct->a
destruct->xd
construct->b
111destruct->xd 

如果把$a = null;去掉

construct->a
construct->b
111 destruct->xd
destruct->xd


ps:析构函数会在程序执行完毕之后进行调用,如果把new类的变量设置为null(重新赋值一样),可以触发析构函数的调用
-->

php获取和处理url常用方法
<?php

//当前页面 http://localhost/ceshi/url.php?id=365

//获取域名或主机地址 
echo $_SERVER['HTTP_HOST']; //localhost
echo "<br>";

//获取当前页面url
echo $_SERVER['PHP_SELF']; //   /ceshi/url.php,如果url为url.php/index/index,则输出/ceshi/url.php/index/index
echo "<br>";

//获取当前页面参数
echo $_SERVER["QUERY_STRING"];//id=365
echo "<br>";

//获取端口
echo $_SERVER["SERVER_PORT"];//80
echo "<br>";

//完成的url
$url =  'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER["QUERY_STRING"];
echo $url;
echo "<br>";


echo "<pre>";
print_r(pathinfo($url));  //返回文件路径的信息 
/*结果 Array
(
    [dirname] => http://localhost//ceshi
    [basename] => url.php?id=365
    [extension] => php?id=365
    [filename] => url
)*/
print_r(parse_url($url)); //解析 URL,返回其组成部分 
/*结果Array
(
    [scheme] => http
    [host] => localhost
    [path] => //ceshi/url.php
    [query] => id=365
)
*/


print_r(basename($url)); // 返回路径中的文件名部分  结果url.php?id=365
echo "<br>";


print_r(dirname($url)); //返回路径中的目录部分 结果 http://localhost/ceshi

php设计模式之策略模式简单事例
<?php

//策略模式

interface OutputInterface
{
    public function load($arrayOfData);
}


class SerializedArrayOutput implements OutputInterface
{
    public function load($arrayOfData)
    {
        return serialize($arrayOfData);
    }
}

class JsonStringOutput implements OutputInterface
{
    public function load($arrayOfData)
    {
        return json_encode($arrayOfData);
    }
}

class ArrayOutput implements OutputInterface
{
    public function load($arrayOfData)
    {
        return $arrayOfData;
    }
}



class SomeClient
{
    private $output;

    public function setOutput(OutputInterface $outputType)
    {
        $this->output = $outputType;
    }

    public function loadOutput($arrayOfData)
    {
        return $this->output->load($arrayOfData);
    }
}


$client = new SomeClient();


$arrayOfData =  array('name'=>'action','age'=>'28');
// Want an array?
$client->setOutput(new ArrayOutput());
$data = $client->loadOutput($arrayOfData);
var_dump($data);

echo "<hr>";

// Want some JSON?
$client->setOutput(new JsonStringOutput());
$data = $client->loadOutput($arrayOfData);
var_dump($data);

echo "<hr>";

// Want some Serialized?
$client->setOutput(new SerializedArrayOutput());
$data = $client->loadOutput($arrayOfData);
var_dump($data);
php设计模式之单例模式简单事例
<?php

//单例模式
class Singleton
{
	/**
	 * @var 这个类的"单例"
	 */
	private static $instance;

	/**
	 * 防止在这个类之外new这个类
	 */
	private function __construct()
	{
	}

	/**
	 * @return 返回这个类的单例
	 */
	public static function getInstance()
	{
		if(self::$instance === null){
			self::$instance == new self();
		}
		return self::$instance;
	}

	/**
     * @return void 把 clone 方法声明为 private,防止克隆单例
     */
    private function __clone()
    {
    }

     /**
     * @return void 把反序列化方法声明为 private,防止反序列化单例
     */
    private function __wakeup()
    {
    }

}

class SingletonChild extends Singleton
{
}

$obj = Singleton::getInstance();
var_dump($obj === Singleton::getInstance());             // bool(true)

$anotherObj = SingletonChild::getInstance();
var_dump($anotherObj === Singleton::getInstance());      // bool(true)

var_dump($anotherObj === SingletonChild::getInstance()); // bool(true)

?>

单例模式是非常有用的,特别是我们需要确保在整个请求的声明周期内只有一个实例存在。 典型的应用场景是,当我们有一个全局的对象(比如配置类)或一个共享的资源(比如事件队列)时。

php设计模式之工厂模式简单事例
<?php

//工厂模式

class Automobile
{
	private $vehicleMake;
	private $vehicleModle;

	public function __construct($make,$model)
	{
		$this->vehicleMake = $make;
		$this->vehicleModle = $model;
	}

	public function getMakeAndModel()
	{
		return $this->vehicleMake.' '.$this->vehicleModle;
	}

}


class AutomobileFactory
{
	public static function create($make,$model)
	{
		return new Automobile($make,$model);
	}
}

$veyron = AutomobileFactory::create('Bugatti','Veyron');

print_r($veyron->getMakeAndModel());
?>

上面的代码用来一个工厂来创建 Automobile 对象。用这种方式创建对象有两个好处: 首先,如果你后续需要更改,重命名或替换 Automobile 类,你只需要更改工厂类中的代码,而不是在每一个用到 Automobile 类的地方修改; 其次,如果创建对象的过程很复杂,你也只需要在工厂类中写,而不是在每个创建实例的地方重复地写。

php-fpm重启、启动、停止命令
启动php-fpm:
/usr/local/php/sbin/php-fpm

php-fpm需要使用信号控制,master进程可以理解以下信号
INT, TERM 立刻终止
QUIT     平滑终止
USR1     重新打开日志文件
USR2     平滑重载所有worker进程并重新载入配置和二进制模块

重启方法1
先查看php-fpm的master进程号
ps aux|grep php-fpm
然后
kill -USR2 进程号
重启方法2
cat /usr/local/php/etc/php-fpm.conf
找到对应的php-fpm.pid
kill -USR2 'cat /usr/local/php/var/run/php-fpm.pid'


关闭
kill INT 'cat /usr/local/php/var/run/php-fpm.pid'

使用shell脚本每秒执行一次php程序


vim test.sh

#!/bin/bash

step=1 #间隔的秒数,不能大于60
 for (( i = 0; i < 60; i=(i+step) )); do
         $(/work/software/php/bin/php  '/work/www/live/test.php')
             sleep $step
         done
         exit 0




优惠券
广告位-淘宝
最新微语