簡體   English   中英

從另一個腳本請求一個PHP腳本並繼續

[英]Request a PHP script from another script and move on

我正在建立一個論壇,允許用戶上傳圖像。 在將圖像移動到S3存儲桶之前,它們會臨時存儲在Web服務器上(因此我可以使用進度條上傳它們)。 我還沒有想辦法做到這一點,但是我認為以下幾點是有意義的:

  1. 使用帶有進度條的XHR將圖像上傳到Web服務器
  2. 等待用戶提交他的帖子
  3. 取消鏈接他最終未包含在他的帖子中的圖像
  4. 調用將剩余圖像上傳到S3的 URL(完成后更新帖子正文中的圖像URL)
  5. 將用戶重定向到他在主題中的帖子

現在,由於第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上找到它的,但需要進行一些調整。 開始:

  1. 該解決方案需要exec()shell_exec() 使用哪一個都不重要,因為所有輸出都會被丟棄。 我選擇了exec()

  2. 由於我使用的是MAMP,而不是系統級的PHP安裝,因此我需要指向MAMP軟件包中的PHP二進制文件。 (這實際上有所不同。)我決定在名為PHP_BIN的常量中定義此路徑,以便為本地和實時環境設置不同的路徑。 在這種情況下:

    define(PHP_BIN, '/Applications/MAMP/bin/php/php5.3.6/bin/php');

  3. 理想情況下,我想在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); } } 
  4. 這個SO問題中,我找到了在后台執行shell命令的方法。 這是必要的,因為我不希望用戶必須等到完成為止。

  5. 最后,我運行以下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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM