Linux命令行下操做php的经验总结

随着网站的成长,网站改版也是常事儿。有时候不得不对数据进行迁移,对于从A库转移到B库,从A表转移到B表。咱们通常的想法就是写一个PHP脚本而后再浏览器窗口进行循环进行导入。可是浏览器执行php要走dns、http协议这些,无形中处理数据的效率会大打折扣。那何不在linux下面直接执行php脚本呢? php

遇到的问题
1.如何像在浏览器中那样得到$_GET参数呢?
须要使用$argv - 传递给脚本的参数数组
linux

[root@bogon wwwroot]# php test.php page 1 cateid 120
Array
(
    [0] => test.php
    [1] => page
    [2] => 1
    [3] => cateid
    [4] => 120
)
test.php源码

<?php
print_r($argv);
2.如何记录php运行日志呢?

一开始,我是在php中写脚本,将执行完的数据id存储到一个文本中,循环一次就是执行一次文本操做。这种方式虽然能够实现个人要求,可是不够灵活,须要考虑文本文件是否可写。如今的解决办法是让php脚本把记录id echo 出来而后用下面这个命令就能够实现日记记录啦。 shell

/usr/local/php/bin/php /usr/local/src/work.php > id.log

是否是很方便呢? 数组

3.如何让php脚本后台执行呢?
在本机的虚拟机上执行php脚本,下班后电脑一关就没有办法执行了。而导数据是一个慢功夫,可能须要一天一晚上,因此通常都是部门内部的服务器上执行php脚本,可是我已关闭终端,脚本就再也不执行了。所以,如何关闭终端后脚本还正常执行呢?如上面提到的命令,能够进行一些改造。 浏览器

nohup /usr/local/php/bin/php /usr/local/src/work.php > id.log &
这样即使是关闭了终端,这个命令也能够做为一个后台进程继续执行下去。知道把数据处理完成为止。

4.数据转移就是一条条数据的转移确定是要用到循环的,这循环怎么写呢?这个页码又该如何保持呢?
先看一段伪代码吧 服务器

while (1)
{
    if ($page < $count) {
        执行处理的脚本
    } else {
        break;
    }
}
使用while(1)做为死循环,只要不知足跳出的条件就一直执行下去。那个$page每循环一次都要加1的,而这个$page能够存到内存中,一开始我采用的是将$page的值存到memcache里面,虽然能够实现可是,代码的移植性不好,何不把$page的值存到静态变量里面呢,其实静态变量是内存中开了一个空间而已,并且实现起来也比较简单。由于个人到数据脚本是面向过程的,没有专门去研究如何封装,反正也不让别人用本身用着顺手就好了,因此代码质量比较槽,不过能完整需求。我专门写了一个计数器类。代码以下:
class counter
{
	public static $counter = 0;
	
	function __construct($counter = 0)
	{
		self::$counter = $counter;
	}
	
	public static function getCounter()
	{
		self::$counter ++;
		return self::$counter;
	}
}
以上内容是我我的的一些总结,可能不够专业,但愿给位oschina的高手们多指点。
相关文章
相关标签/搜索