博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux命令行下操作php的经验总结
阅读量:5847 次
发布时间:2019-06-19

本文共 1500 字,大约阅读时间需要 5 分钟。

hot3.png

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

遇到的问题

1.如何像在浏览器中那样获得$_GET参数呢?
需要使用 - 传递给脚本的参数数组

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

2.如何记录php运行日志呢?

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

/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的高手们多指点。

转载于:https://my.oschina.net/jiangbianwanghai/blog/100520

你可能感兴趣的文章
Linux系统监控命令及定位Java线程
查看>>
C++中L和_T()之区别
查看>>
Apache alias目录配置
查看>>
开发框架:利用STRUTS实现国际化支持
查看>>
[Android]基于RxJava、RxAndroid的EventBus实现
查看>>
nodejs 中使用 ftp
查看>>
百战天虫中子弹的挖坑效果
查看>>
angularjs1-7,供应商
查看>>
C#中的抽象类和子类
查看>>
Silverlight_Rest_WCF系列之二:调用Rest
查看>>
Windows Mobile使用Native C++开发多线程程序
查看>>
枚举 EnumDescription 位运算 权限 sql c#
查看>>
INSERT DELAYED使用总结
查看>>
对 pcp_pool_status的分析
查看>>
真正理解 git fetch, git pull 以及 FETCH_HEAD【转】
查看>>
webpack解惑:多入口文件打包策略
查看>>
RTC硬件时钟设置修改【转】
查看>>
[Android Pro] ant 编译android工程
查看>>
sql server 利用发布订阅方式实现数据库同步问题
查看>>
Android组件之自定义ContentProvider
查看>>