2009-07-10 252 views
13

我想要做和我以前的Python問題完全一樣的東西,但在PHP中。 See my previous (answered) question如何讓php腳本運行另一個php腳本

上一個問題的PHP腳本會執行一些操作,然後在同一臺服務器上運行另一個PHP腳本,執行某些操作然後退出(而第二個腳本仍然繼續工作)。我如何實現這一目標?

請注意,PHP腳本也是在同一時間(所以也許我們可以在前面的問題使用等,其中給我的回答是片段,由蟒蛇只是打開URL不是運行工段的一個網頁.. 。雖然我沒有線索,如果這是有用的信息,也許這是不同的PHP,我不太經驗的PHP)...我想使每個腳本獨立 - 所以如果第一個PHP腳本將完成我想第二個PHP腳本繼續工作,即使第一個結束了

您認爲最優雅的方式是做什麼?會迴應iframe的工作,還是我應該這樣做呢?

回答

2

如果用戶將使用Web瀏覽器訪問php腳本,我會使用ajax來調用第二頁。

用戶甚至不知道它被調用。

對AJAX

+17

下投票發送原始海報W3Schools的。請參閱:http://w3fools.com/ – 2013-01-14 16:46:42

+4

#1需要自動替換爲與MDN w3schoolds。 https://developer.mozilla.org/en/docs/AJAX – 2013-08-08 01:33:01

+0

不好,因爲基本上是一個鏈接的回答,不知道如何使用Ajax從PHP腳本調用另一個php腳本 – Andrew 2015-09-03 19:40:38

2

如果需要這個腳本等要運行教程參見w3schools,具體取決於客戶端的做法並不明智。

我會做的是使用this StackOverflow question(指向this comment in the PHP documentation)的答案中描述的技術,並將其他腳本作爲後期處理。

但是,該評論是在2006年撰寫的,從那時起事情可能會發生變化。請嘗試技巧(因爲我會做,只是爲了好玩),看看它是否適用於你:)

1

據我所知,沒有任何方法可以運行第二頁(AJAX是例外)。據我所知,PHP不支持多線程(如果我錯了,請糾正我),並且網絡的「單線程」本質似乎無論如何都擊敗了它。

我寧願傾向於看看您的具體應用程序,並找出爲什麼您需要有兩個單獨的頁面運行 - 然後重新設計過程,所以它不。

我願意打賭,從開發的角度來看,重新設計工程師將不再是一個頭痛的問題,也是一個邏輯和實施方案。

16

這是一個位UNIX的/ Linux的唯一劈,可能無法在共享Web服務器的工作:

file1.php

<?php 
$somearg = escapeshellarg('blah'); 
exec("php file2.php $somearg > /dev/null &"); 

file2.php

<?php 
//do some stuff that will take a while 
//$argv should contain 'blah', and also it seems the name of the php file 
//this script will continue to run. You might want to set max_execution_time to a sensible value. 
0

我無法讓我以前的答案工作,但我懷疑這可能是我自己的服務器的錯,或者新的瀏覽器拒絕關閉連接時指示(我真的不是一個親該shtuff工程)。

如果該方法不爲你工作,要麼,嘗試this article on pseudo-multi-threading in PHP,看看你是否有更好的運氣:)

4

你可以通過把 header('Location: second.php'); 在first.php又一次年底做在second.php結束時開始執行third.php等等。甚至你可以創建兩個腳本之間的週期,即結束first.php後,second.php將啓動和執行second.php再次first.php後,再次second.php等。

但請記住,這是一個依賴於瀏覽器的功能,多少腳本可以被執行此起彼伏,完全依賴於瀏覽器多少次允許重定向。我發現mozilla允許23個重定向,這意味着你可以一個接一個地執行23個腳本。

3

要在同一臺服務器上運行第二個腳本

$appUrl = $_SERVER['HTTP_HOST']; 
$path = 'second.php';//your path here 
$appUrl = 'http://'.$appUrl.'/'.$path; 
file_get_contents($appUrl); 
0

如果您的遠程腳本是通過HTTP簡單的網頁訪問,你可以嘗試變異與HTTP GET請求,其中響應超時通過設置爲最短的時間,例如CURL:

if($curl = curl_init()) { 
    curl_setopt($curl, CURLOPT_URL, 'http://your_site/your_script.php'); 
    curl_setopt($curl, CURLOPT_TIMEOUT, 1); 
    curl_exec($curl);  
    curl_close($curl); 
} 

但是所以你在第一次執行腳本時會延遲1秒。

相關問題