How can I run several PHP scripts from within another PHP script, like a batch file? I don't think include will work, if I understand what include is doing; because each of the files I'm running will redeclare some of the same functions, etc. What I want is to execute each new PHP script like it's in a clean, fresh stack, with no knowledge of the variables, functions, etc. that came before it.
如何從另一個PHP腳本中運行多個PHP腳本,如批處理文件?我不認為包含會起作用,如果我明白包括在做什么;因為我正在運行的每個文件都將重新聲明一些相同的函數,等等。我想要的是執行每個新的PHP腳本,就像它在一個干凈,新鮮的堆棧中,不知道變量,函數等。來到它面前。
Update: I should have mentioned that the script is running on Windows, but not on a web server.
更新:我應該提到腳本在Windows上運行,但不在Web服務器上運行。
4 个解决方案
#1
You could use the exec() function to invoke each script as an external command.
您可以使用exec()函數作為外部命令調用每個腳本。
For example, your script could do:
例如,您的腳本可以執行以下操作:
exec('php -q script1.php');
exec('php -q script2.php');
?>
Exec has some security issues surrounding it, but it sounds like it might work for you.
Exec有一些安全問題,但聽起來它可能適合你。
#2
//使用exec http://www.php.net/manual/en/function.exec.php
exec('/usr/local/bin/php somefile1.php');
exec('/usr/local/bin/php somefile2.php');
?>
In the old days I've done something like create a frameset containing a link to each file. Call the frameset, and you're calling all the scripts. You could do the same with iframes or with ajax these days.
在過去,我做過類似創建包含每個文件鏈接的框架集的事情。調用框架集,然后調用所有腳本。這些天你可以用iframe或ajax做同樣的事情。
#3
exec() is a fine function to use, but you will have to wait until termination of the process to keep going with the parent script. If you're doing a batch of processes where each process takes a bit of time, I would suggest using popen().
exec()是一個很好用的函數,但你必須等到進程終止才能繼續使用父腳本。如果你正在做一批每個進程需要一些時間的進程,我建議使用popen()。
The variable you get creates a pointer to a pipe which allows you to go through a handful of processes at a time, storing them in an array, and then accessing them all with serial speed after they're all finished (much more concurrently) using steam_get_contents().
你得到的變量創建了一個指向管道的指針,它允許你一次完成一些進程,將它們存儲在一個數組中,然后在它們全部完成(更多並發)之后以串行速度訪問它們steam_get_contents()。
This is especially useful if you're making API calls or running scripts which may not be memory-intensive or computationally intensive but do require a significant wait for each to complete.
如果您正在進行API調用或運行可能不是內存密集型或計算密集型但需要大量等待完成每個腳本的腳本,這將非常有用。
#4
If you need any return results from those scripts, you can use the system function.
如果需要這些腳本的任何返回結果,則可以使用系統函數。
$result = system('php myscript.php');
$otherresult = system('php myotherscript.php');