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的高手們多指點。
相關文章
相關標籤/搜索