PHP 批處理 處理大資料 長時間處理_PHP教程

來源:互聯網
上載者:User
最近在做一個東西,用PHP寫的,由於要將資料庫中的圖片名字讀出來,然後訪問對應圖片,讀取圖片的大小以及解析度,重新存入資料庫。資料量現在才是處理5000條的,如果不加任何設定的話,php預設最大執行時間是30秒。

所以30秒內,我只能處理700條,剛開始只能手動,七百、七百的執行了。後來感覺這樣不行,以後的資料量會過10W,這樣會累死我的。

網上搜尋了下,有三種處理方式。

第一種

很直接,既然你預設30秒,那麼我就把你的預設時間設定長點,或者直接沒有限制。

在php中添加,php ini_set('max_execution_time', '100');函數就可以了,100代表100秒,如果你設定了0,那麼就代表沒有限制。(ps:我用的是zend的結合,設定為0的時候,不是沒有限制,而是大概是120的樣子,我的解決方案是,把這個值設定的so big)


第二種

本人很喜歡,是利用php和批處理的結合。


[php]
@REM@REM =='
@SET PHPCLI="D:\Program Files\Zend\Zend Studio - 8.0.1\plugins\org.zend.php.debug.debugger.win32.x86_5.3.18.v20110322\resources\php53\php.exe"
@REM PHPCLI 設定你的php.exe的路徑
@%PHPCLI% %0
@goto :EOF
@REM';?>
include'C:\\Program Files\\Zend\\Apache2\\htdocs\\pic_gather\\pic_operate.php';
echo "\rfinish";
ob_flush();
exec("pause");
?>

是批處理命令,所以我還花了1個小時特地看了下批處理命令。大致翻譯下上面的程式。

@:不顯示後面的指令,如果去掉,指令會在命令視窗中列印出來

REM 是批處理的注釋,後面的是注釋,不執行。跟@不同,@只是命令不列印出來,並不表示注釋。


程式開始執行,首先是bat運行

[php]
@SET PHPCLI="D:\Program Files\Zend\Zend Studio - 8.0.1\plugins\org.zend.php.debug.debugger.win32.x86_5.3.18.v20110322\resources\php53\php.exe"
設定了PHPCLI的值
[php] view plaincopy
@%PHPCLI% %0
%PHPCLI% 代表的就是你上面設定的路徑,這裡表示執行php.exe,然後%0代表此.bat檔案所在的路徑, 連起來的意思就是用php.exe運行.bat檔案。

會出現上面現象呢,php可不認為REM是注釋呀,只認為是普通的字元。

就會首先列印@REM,然後

[php]
@REM =='
@SET PHPCLI="D:\Program Files\Zend\Zend Studio - 8.0.1\plugins\org.zend.php.debug.debugger.win32.x86_5.3.18.v20110322\resources\php53\php.exe"
@REM PHPCLI 設定你的php.exe的路徑
@%PHPCLI% %0
@goto :EOF
@REM';?>
這裡,php.exe可認識了,表示上面意思?在php中@可認識否?這個表示抑制錯誤,那麼就是字串‘’中的內容與REM進行==,那麼有被@抑制錯誤。安然度過。

進入下一段

[php]
include'C:\\Program Files\\Zend\\Apache2\\htdocs\\pic_gather\\pic_operate.php';
echo "\rfinish";
ob_flush();
exec("pause");
?>
這裡就是你要執行的程式了。我不想寫在這裡面,那麼就include一下,這樣容易讓.bat成為一個模板。

到此你的php.exe算是走完了,可是還沒完呢,剛剛批處理命令才到

[php]
@%PHPCLI% %0
之後為了不讓批處理命令不認識php的語言,用了

[php]
@goto :EOF
來結束程式。
有人問為什麼不直接這樣:

[php]
@SET PHPCLI="D:\Program Files\Zend\Zend Studio - 8.0.1\plugins\org.zend.php.debug.debugger.win32.x86_5.3.18.v20110322\resources\php53\php.exe"
@REM PHPCLI
@%PHPCLI% %0
@goto :EOF

include'C:\\Program Files\\Zend\\Apache2\\htdocs\\pic_gather\\pic_operate.php';
echo "\rfinish";
ob_flush();
exec("pause");
?>
不用搞這麼複雜,我也試了下,

發現cmd命令列會出現:

@SET PHPCLI="D:\Program Files\Zend\Zend Studio - 8.0.1\plugins\org.zend.php.debu
g.debugger.win32.x86_5.3.18.v20110322\resources\php53\php.exe"
@REM PHPCLI
@%PHPCLI% %0
@goto :EOF

這代碼的原作者,就是想避免出現這樣的情況,然列印出太多的垃圾資訊。

所以說這才是原作者的精闢之處呀。

第三種

這個如果你,僅僅只要更新裡面的字串資訊,比如你設定了class類,如果class='自然風光',那麼就把image前面加上pic_gather/nature/image。那麼沒有必要用上面的這麼複雜的東西,直接用sql語言就行了,concat()函數就有這樣的功能。

作者:wolinxuebin

http://www.bkjia.com/PHPjc/478115.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/478115.htmlTechArticle最近在做一個東西,用PHP寫的,由於要將資料庫中的圖片名字讀出來,然後訪問對應圖片,讀取圖片的大小以及解析度,重新存入資料庫。...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.