0
proc_open()
으로 명령을 실행하는 새 서버에 문제가 있습니다. 테스트를 위해 다음 스크립트를 만들었습니다.proc_open()이 같은 명령을 여러 번 실행하는 이유는 무엇입니까?
$desc = array(
0 => array('pipe', 'r'), // we use to write data
1 => array('pipe', 'w'), // we use to read data
2 => array('pipe', 'w') // errors' log
);
$cmd = "exec php -v";
$process = proc_open($cmd, $desc, $pipes);
if (is_resource($process)) {
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
$cmd .= "\nMETA: " . print_r(stream_get_meta_data($pipes[1]), true);
if (is_resource($pipes[1])) {
$cmd .= "\nSTDOUT: " . stream_get_contents($pipes[1]);
}
if (is_resource($pipes[2])) {
$cmd .= "\nSTDERR: " . stream_get_contents($pipes[2]);
}
$status = proc_get_status($process);
$cmd .= "\n" . print_r($status, true);
proc_close($process);
} else {
$cmd .= "\nFailed!";
}
echo "<pre>{$cmd}</pre>";
스크립트가 멈추고 출력이 표시되지 않습니다. 콘솔을 들여다 보면 스크립트가 동일한 명령을 여러 번 생성하고 있음을 알 수 있습니다. 참조 :
root[~]# clear && ps ax o pid,args | grep [p]hp
10122 /usr/bin/php /home/user/public_html/thread.php
10124 php -v
10126 php -v
10128 php -v
10130 php -v
10132 php -v
10134 php -v
10136 php -v
10138 php -v
10140 php -v
10142 php -v
10144 php -v
10146 php -v
10148 php -v
10150 php -v
10152 php -v
10154 php -v
10156 php -v
10158 php -v
10160 php -v
10162 php -v
10164 php -v
10166 php -v
10168 php -v
10170 php -v
10172 php -v
10174 php -v
10176 php -v
10178 php -v
10181 php -v
10184 php -v
10187 php -v
10189 php -v
10191 php -v
10193 php -v
10195 php -v
10197 php -v
10199 php -v
10201 php -v
10205 php -v
10207 php -v
10210 php -v
10212 php -v
10214 php -v
10216 php -v
10219 php -v
10222 php -v
10224 php -v
10226 php -v
10229 php -v
10231 php -v
10233 php -v
10235 php -v
10237 php -v
10239 php -v
10242 php -v
10245 php -v
10248 php -v
10250 php -v
10252 php -v
10254 php -v
10256 php -v
10258 php -v
10260 php -v
10262 php -v
10264 php -v
10266 php -v
10268 php -v
10270 php -v
10272 php -v
10274 php -v
10276 php -v
10279 php -v
10282 php -v
10284 php -v
10287 php -v
10289 php -v
10291 php -v
10293 php -v
10295 php -v
10297 php -v
10299 php -v
10301 php -v
10303 php -v
10305 php -v
10307 php -v
10309 php -v
10311 php -v
10313 php -v
10315 php -v
10317 php -v
10319 php -v
10321 php -v
10323 php -v
10325 php -v
10327 php -v
10329 php -v
그러나 동일한 스크립트는 내 로컬 컴퓨터 (Win10)에서 작동합니다. 이미이 문제에 대해 봤지만 다른 곳에서는 찾지 못했습니다.
서버 환경 또는 PHP 설치와 관련된 것이 있습니까?
무엇을하려고합니까? 왜 '임원'이라고 부르니? – miken32
실제로는 외부 프로세스에서 PHP 스크립트를 실행하고 싶습니다. 이유는'Thread'라는 클래스가있는 프레임 워크를 작성했기 때문입니다. 이 클래스는 별도의 프로세스에서 (비동기로) 동작을 실행하기위한 클래스입니다. 그래서 내가하는 일은 새로운 쉘을 시작하고 백그라운드에서 PHP 스크립트를 실행하는 것입니다. 이 솔루션은 이미 다른 플랫폼에서 잘 작동하지만 지금은이 문제에 직면하기 시작했습니다. –
그리고'exec'에 대해서, snippet은 그것없이 잘 동작합니다. 그러나 실제 구현시에는 코드를 넣어야했습니다 (코드가 약간 오래된 이유를 기억하지 마십시오). 하지만 내가 잘못하지 않았다면 실제 명령에 대한 하위 셸을 얻지 않는 것입니다. –