Я действительно не могу понять это.
Что может быть причиной того, что мой локальный хост Wamp иногда выдает ошибку (код выхода 1) при обновлении страницы?
Тот же сценарий, то же исполнение … но по какой-то причине время от времени я получаю exitcode 1
И мой тест с npm list
думает, что это текущий рабочий каталог находится в папке установки Apache (я серьезно не знаю, откуда он это взял …)
Этот вопрос немного сложно объяснить словами, поэтому вот захват GifCam:
================================================== ===
================================================== ===
Я пробовал кучу разных вещей, чтобы изолировать, где проблема может быть:
proc_open
трубы после того, как это называется.Некоторые заметки / наблюдения:
/www/
папка содержит символическая ссылка, указывая на W:\_WWW\
,Я склоняюсь к тому, что есть вероятность, что это вызвано символической ссылкой, но я искал известные подобные проблемы в сети, и, кажется, ничто не близко к этому.
Вот пример кода:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CMS</title>
</head>
<body>
<a href='?node=npm&node_args=list'>Click to run "npm list"</a><br/>
<pre>
<?php
if(!isset($_GET['node'])) die();
function trace($msg) { echo "$msg\n"; }
$errorFile = "./.node-errors.txt";
$descriptorspec = [
0 => ["pipe", "r"], // stdin is a pipe that the child will read from
1 => ["pipe", "w"], // stdout is a pipe that the child will write to
2 => ["file", $errorFile, "a"] // stderr is a file to write to
];
$nodeCommand = $_GET['node'];;
if(isset($_GET['node_args'])) {
trace("NodeJS Args: " . $_GET['node_args'] . "\n\n");
$nodeArgs = $_GET['node_args'];
} else {
$nodeArgs = '';
}
//??? test
//$nodeCommand $nodeArgs
$process = proc_open("npm list", $descriptorspec, $pipes, getcwd());
if (is_resource($process)) {
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
fclose($pipes[0]);
//fclose()
// It is important that you close any pipes before calling
// proc_close in order to avoid a deadlock
$return_value = proc_close($process);
if ($return_value !== 0) {
trace("ERROR: command returned $return_value");
echo file_get_contents($errorFile);
//file_put_contents($errorFile, ''); //Clear the error
} else {
trace("===============================\nCompleted server-side command.");
}
}
?>
</pre>
</body>
</html>
Есть идеи?
ОБНОВИТЬ:
В случае, если это стоит упомянуть — проект, в котором я работаю, управляется версией (Git), и обычно у меня открыт рабочий стол клиента Github. Может быть, это вызывает проблемы при мониторинге изменений файлов? Собираюсь держать это закрытым завтра …
Задача ещё не решена.
Других решений пока нет …