Системные вызовы PHP и $ PATH в OS X - PullRequest
0 голосов
/ 08 августа 2010

Я пытаюсь заставить PHP выполнять системные вызовы в OS X. Однако, похоже, он не может найти ничего, что включено в системный путь.

Когда я бегу ...

putenv("PATH={$_SERVER["PATH"]}:/usr/local/bin");

... как раз перед системным вызовом работает. Это не практичное решение, поскольку код, выполняющий системный вызов, является плагином, поэтому я бы предпочел не трогать исходный код, который сделает его несовместимым, при обновлении.

Apache2 работает под тем же пользователем, на котором я вошел, поэтому теоретически он имеет доступ к тем же командам, что и я.

Кроме того, тот же код отлично работает на моей машине с Ubuntu.

1 Ответ

0 голосов
/ 20 сентября 2010

Переменные среды в Mac OS X устанавливаются различными механизмами в зависимости от того, как был запущен ваш код или его родительский процесс.Чтобы гарантировать, что элементы, запускаемые из интерактивной оболочки, и элементы, запускаемые WindowServer, имеют одинаковый путь, необходимо синхронизировать ~ / .MacOSX / environment.plist с тем, что задано в .profile (или .cshrc).

Самым простым средством достижения цели без необходимости редактирования среды является указание временного пути для того, что вы выполняете с помощью системной команды.Например:

char cmdStr[512] = "PATH=$PATH:/usr/local/bin";
strncat(cmdStr,"MyCommand", 9);
system(cmdStr);

Таким образом, среда влияет только на контекст MyCommand и восстанавливается впоследствии.

...