2014-02-06 3 views
5

поэтому я прочитал около 10 ответов, и все, кажется, предлагают идеи, которые по какой-то причине не работают.PHP exec на Windows с конфигурацией IIS

я пытаюсь выполнить простую командную строку, которая является «обновление СВН», но он не работает, и она возвращает NULL

поэтому я пытался проб и ошибок, как и на данный момент это то, что я могу сказать, ;

я попробовал несколько команд, как

<?php 
exec ("cmd /c ping 127.0.0.1 -n 1 > results.txt "); 
?> 

и

<?php 
exec ("cmd /c chdir > results.txt "); 
?> 

и обе работы .. Infact ChDir говорит точное положение, когда файл PHP выполнения строки хранится на компьютере ..

поэтому проблема сейчас, почему некоторые команды, как это:

<?php 
exec ("cmd /c dir > results.txt "); 
?> 

не работает? это результаты и пустое значение, хотя внутри папки у меня есть несколько файлов и каталогов.

и почему, если я использовать командную строку, чтобы перейти в папку, где находится файл РНР магазин и тип SVN обновления он работает и делает

<?php 
exec ("cmd /c svn update > results.txt "); 
?> 

возвращающие NULL?

любая помощь действительно оценена.

он чувствует, как я есть некоторые ограничения dued для настройки конфигурации, потому что, когда я пытаюсь в местных использовании апача я могу получить большинство команд для работы (shell_exec, система, EXEC, даже без Cmd/с)

+1

Итак, когда вы запускаете команду cmd/c svn update result.txt из функции php 'exec', она не работает. И если вы запускаете его самостоятельно с консоли, это работает? – Benz

+1

да точно .. но я получаю ту же проблему и с командой dir, которая, если бежать с консоли, дает мне правильный результат. в то время как, например, ping и chdir дают одинаковый результат – mstation

+1

И что, если вы возьмете объезд, создав файл .bat и позвольте php запустить этот файл вместо команды 'svn up'? – Benz

ответ

8

Ok.

Мне удалось решить проблему ..

это то, что я сделал:

первой проверка именно то, что имя пользователь работает для конкретного сайта .. сделать это сделать:

<?php 
$out = array(); 
exec('cmd /c whoami 2>&1',$out,$exitcode); 
echo "<br />EXEC: (exitcode : $exitcode)"; 
echo "<hr /><pre>"; 
print_r($out); 
echo "</pre>"; 
?> 

это вернет имя_компьютер сопровождаемого имени ..

теперь на компьютере под управлением веб-сервера запустить

control userpasswords2 

и дают администратору полномочия на имя пользователя Whoami сказал

это позволит, наконец, запустить любую команду, которую вы хотите с помощью Exec или system_exec


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

svn: E125001: Can't determine the user's config path 

решить эту проблему, вы просто должны указать в команде config_dir by d при этом:

exec('cmd /c svn update --config-dir C:\Users\Administrator\AppData\Roaming\Subversion C:\\inetpub\\vhosts\\websitename\\httpdocs\\folder 2>&1',$out,$exitcode); 

надеюсь, что это поможет другим, у которых возникли проблемы, подобные тем, которые у меня были!

+0

Я не очень доволен тем, что мне пришлось предоставить права администратора для этого пользователя. К сожалению, это был единственный способ, позволяющий ему работать :(Однако спасибо за решение – mesnicka

+0

У меня есть аналогичная проблема, я не могу использовать на сервере: Windows Server 2012 R2, IIS 8, PHP Version 5.6.12 exec(). У меня есть программа pdftotext, которая преобразует PDF в TXT и записывает результат в файл, но exec возвращает ошибку 1, потому что пользователь IUSR_ANONYMOUSUSER не имеет прав доступа к CMD. Мы уже протестировали пользователя AppPool, но это там не работает и дает ошибку FORK. –

0

Вероятно, это проблема с правами системных пользователей. Я пробовал ваш пример:

<?php exec ("cmd /c dir > results.txt "); ?> 

На моем Windows7 с Xampp установлен, и он работал отлично. Однако с IIS «пользователь» может не иметь прав доступа к каталогу, с моей точки зрения, я думаю, что это может быть системный пользователь IIS-IUSR или что-то в этом роде.

Вот ссылка, которая может помочь с правами пользователя для IIS: http://www.iis.net/learn/get-started/planning-for-security/understanding-built-in-user-and-group-accounts-in-iis

+0

Я также считаю, что это проблема разрешений, но кроме полного доступа (777) к IISUSR я не знаю, что еще я мог сделать. Я не нашел никакой дополнительной помощи по ссылке, которую вы мне дали, извините – mstation

0

Хорошо, на основе ваших ответов, я думаю, вы должны попробовать это:

Выполнить вашу команду, используя «svn.exe» исполняемый файл (замените [[местоположение местоположения]]). Вполне возможно, что ваш клиент имеет другое расположение svn.exe, но вы должны понять, что из себя :)

exec('cmd /c "c:\\Program Files\\TortoiseSVN\\bin\\svn.exe" up "[[repository location]]"'); 

Что happends сейчас?

Существует также второй параметр в exec, возможно, вы также должны взглянуть на него.

+0

спасибо за подсказку! так как у меня нет установленной командной строки tortoisesvn, я использую sliksvn .. Я попробовал это как команду: test.txt»); ?>?> , но он генерирует пустой файл txt, в то время как в .bat-файлах обновляется до версии x – mstation

+0

, ожидая правильного решения. У меня есть автоматическая операция на окнах 2k8, чтобы он запускался почасовым файлом bat, который с тех пор работа, и я разбираю result.txt, чтобы я знал, был ли источник обновлен или нет. Вероятно, он будет придерживаться этого решения на мгновение, пока я не получу, как запустить cmd из php напрямую – mstation

Смежные вопросы