[英]Request a PHP script from another script and move on
我正在建立一個論壇,允許用戶上傳圖像。 在將圖像移動到S3存儲桶之前,它們會臨時存儲在Web服務器上(因此我可以使用進度條上傳它們)。 我還沒有想辦法做到這一點,但是我認為以下幾點是有意義的:
現在,由於第4步可能要花費大量時間,因此我正在尋找類似cron的解決方案,在這里我可以在后台調用S3上傳腳本,而無需用戶等待它完成。
理想情況下,我正在尋找一種解決方案,該解決方案允許我在框架內請求URL並在查詢中傳遞一些圖像ID,即:
http://mysite.com/utils/move-to-s3/?images=1,2,3
我可以為此使用cURL嗎? 或者,如果必須是exec(),我還可以讓它執行URL(wget?)而不是PHP腳本(php-cli)嗎?
謝謝一堆!
PHP的
register_shutdown_function()
是你的朋友[參考] 。
當腳本終止時,關閉功能將繼續運行。
因此,如果一切可用,請提交結局頁面並exit
。 注冊的關閉功能會繼續並執行耗時的工作。
就我而言,我准備了一個類CShutdownManager
,該類允許注冊腳本終止后要調用的幾種方法。 例如,我使用CShutdownManager
刪除不再需要的臨時文件。
請嘗試以下語句:
shell_exec(php scriptname);
我很高興分享了解決此問題的方法。 我實際上是在SO上找到它的,但需要進行一些調整。 開始:
該解決方案需要exec()
或shell_exec()
。 使用哪一個都不重要,因為所有輸出都會被丟棄。 我選擇了exec()
。
由於我使用的是MAMP,而不是系統級的PHP安裝,因此我需要指向MAMP軟件包中的PHP二進制文件。 (這實際上有所不同。)我決定在名為PHP_BIN
的常量中定義此路徑,以便為本地和實時環境設置不同的路徑。 在這種情況下:
define(PHP_BIN, '/Applications/MAMP/bin/php/php5.3.6/bin/php');
理想情況下,我想在Web框架內執行腳本,而不是某些孤立的Shell腳本。 我編寫了一個接受URL作為參數的包裝器腳本,並將其命名為my_curl.php
:
if(isset($argv[1])) { $url = $argv[1]; if(preg_match('/^http(s)?:\\/\\//', $url)) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); } }
在這個SO問題中,我找到了在后台執行shell命令的方法。 這是必要的,因為我不希望用戶必須等到完成為止。
最后,我運行以下PHP代碼以在后台執行另一個(或ANY)Web請求:
exec(PHP_BIN . ' /path/to/my_curl.php http://site.com/url/to/request &> /dev/null &');
奇跡般有效! 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.