поэтому я прочитал около 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
также есть второй параметр, возможно, вы также должны взглянуть на него.