PHP exec в Windows с конфигурацией IIS

поэтому я прочитал около 10 ответов, и все, кажется, предлагают идеи, которые почему-то не работают.

Я пытаюсь выполнить простую командную строку, которая является «svn update», но она не работает и возвращает 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 "); ?> 

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

и почему, если я использую командную строку для перехода в папку, где хранится php-файл, и введите svn update, он работает и делает

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

вернуть NULL?

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

он чувствует, что у меня есть некоторые ограничения, налагаемые на настройку конфигурации, потому что, когда я пытаюсь использовать локальный с помощью apache, я могу получить большинство команд для работы (shell_exec, system, exec, даже без cmd / c)

ОК.

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

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

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

 <?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, выполнив следующие действия:

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

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

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

 <?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

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

Выполните свою команду с помощью исполняемого файла 'svn.exe' (замените [[местоположение местоположения]]). Возможно, ваш клиент имеет другое местоположение svn.exe, но вам придется это выяснить самостоятельно 🙂

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

Что сейчас происходит?

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