簡體   English   中英

從PHP腳本調用“ php”命令會導致奇怪的進程行為

[英]Invoking “php” command from a PHP script causing strange process behavior

我只是將站點從一個主機移到了另一個。 服務器環境非常相似(LAMP堆棧),並且所有代碼在傳輸時都有效,除了一行。 我對它進行了一些改動以進行測試,但結果仍然很奇怪:

<?php
$out = `php ../test/test.php 123 abc`;
?>

在SSH中從命令行運行php ../test/test.php 123 abc ,它可以正常工作。 當我在SSH中運行: php testrunner.php (上面只有“ $ out”行的文件)時,它也可以按預期運行。

但是,一旦從瀏覽器加載testrunner.php ,它就會掛起。 使用ps aux | grep php ps aux | grep php監視進程,進程似乎產生並消失(為簡潔起見被截斷):

myuser   12790  0.0  0.3 259016 45284  . . . 0:00 php ../test/test.php 123 abc

如果我將“ $ out”行修改為:

<?php
$out = `php ../test/test.php 123 abc &`;
?>

然后使該腳本在后台運行。 令人驚訝的是,幾秒鍾后,當我運行ps aux | grep php ps aux | grep php再次顯示,它顯示相同的內容,但帶有新的PID。 我一直在運行ps aux並繼續使用其他PID進行查看。 這持續了相當長的時間(幾秒鍾,甚至一分鍾)。

這對我來說很奇怪,因為test.php只有一行可以回顯某些文本以進行測試。

從終端正常工作。 從網絡調用時掛起並具有其他奇怪的行為。 我想念什么嗎?

(我通過將輸出重定向到一個日志文件來證明,當從Web瀏覽器運行該日志文件時,PHP腳本似乎調用了ITSELF而不是其他腳本test.php。而且當它表現為這種行為時,它不會收到任何$argv參數...但是當我從命令行運行它時,一切都很好!奇怪嗎?)

更新:Geez ...我只是看着服務器進程,而test.php的PHP進程開始失去控制。 他們成百上千個進程,成倍增加:關閉服務器一分鍾,SSH和所有內容。 現在已經備份了,但是我無法解釋發生了什么。 代碼中沒有循環,並且涉及的兩個文件都非常簡單,出於測試目的而隔離...

我正在與我的主機一起工作,因為他們響應我的支持請求,以查看這是否與環境有關或什么……僅通過更改服務器環境,是什么可能導致這種情況發生?

我的房東A Small Orange很有幫助,但最后,我或他們能想到的就是(從我的支持票中):

...我們作為堆棧的一部分運行的SuPHP或其他基於安全性的其他軟件正在阻止您的進程產生新進程(因為行為由於明顯的原因可能是不安全的)...

無論如何,這些腳本都可以在我的Macbook(與nginx完全不同的配置)和我的舊主機的LAMP堆棧上正常運行,而ASO的設置與此類似。

也許我會問如何在不調用命令行的情況下生成長時間運行的進程,以便不會在另一個問題中阻止調用腳本。

刪除空格並加下划線

$out = `php ../test/test.php_123_abc`;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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