[英]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.