дано:
OS - Server 2003 standart
IIS6 - корпаративный стандарт (Apache - не предлагать)
PHP5.2.8 - установлен как ISAPI
Oracle 10.2 client
скрипт PHP - должен из имеющегося CSV выполнять загрузку в таблицу базы ORACLE с помощью SQL*Loader
Выданы права - для IUSR-****** на все действия для каталогов c:\windows, c:\windows\system32, c:\windows\system32\cmd.exe, c:\windows\temp, c:\php, c:\oracle, c:\oracle\product\10.2.0\client_2\BIN\, c:\oracle\product\10.2.0\client_2\BIN\sqlldr.exe
настройки INI - не safe mode, все пути есть
ситуация:
после генерации PHP скриптом команды для запуска SQL*Loader пробую ее запускать из CMD.exe - прекрасно выполняется
при попытке выполнения этой команды из PHP посредством EXEC, SHELL_EXEC, SYSTEM... - нет никаких ошибок, но и команда не выполняется - нет результатов ее выполнения.
Более того, при попытке выполнения bat файла с этой командой из PHP при помощи перечисленных выше команд с запуском cmd /c часть команд bat файла, не связанная с sql*loader выполняется, а вот команда для SQL*Loader игнорируется.
Была также попытка запуска задачи из диспетчера задач windows, но привела к тому же результату.
вопрос:
как победить эту беду?
Спустя 10 минут, 31 секунда (2.04.2009 - 09:06) Sylex написал(а):
asvlad
что значит нет ошибок и нет результатов?
вывод ошибок включен?
как вызываешь, покажи?
что значит нет ошибок и нет результатов?
вывод ошибок включен?
как вызываешь, покажи?
Спустя 3 часа, 54 минуты, 54 секунды (2.04.2009 - 13:01) sergeiss написал(а):
Цитата (asvlad @ 2.04.2009 - 08:56) |
Более того, при попытке выполнения bat файла с этой командой из PHP при помощи перечисленных выше команд с запуском cmd /c часть команд bat файла, не связанная с sql*loader выполняется, а вот команда для SQL*Loader игнорируется. |
У меня есть подозрение, что ты просто недопонимаешь кое-что.
Я тоже как-то пытался побороть эту же фигню (судя по описанию - один в один).
Несколько дней потратил, пока понял, что всё прекрасно запускается. Но только выполнение процесса происходит в некоем закрытом окне, которое не видно. То есть, визуальных эффектов проявления этого процесса нету никаких.
Процесс можно увидеть и "убить" только через диспетчер задач.
Там для каких-то функций есть возврат текста. При условии, что возврат выполняется То есть, например, если я запускаю BAT-файл, и в конце ставлю EXIT, то происходит полноценный возврат в скрипт. Иначе - нету возврата.
Мне так кажется, что надо где-то в эту сторону копать.
И еще. А почему IIS - корпоративный стандарт? Почему Апач низзя? В IIS есть ряд идиотских ограничений. По причине которых я от IIS отказался.
Спустя 2 часа, 5 минут, 11 секунд (2.04.2009 - 15:06) asvlad написал(а):
sergeiss
запрет на apache н моя тема - я уже много раз пробивал этот вопро - нет и все;
по поводу того, что не выполняется, так и это точно - так как в базе не появляется ничего, а вот если эту же команду запустить просто из CMD окна при прочих равных - то в табличке все появляется...
Sylex
да вывод ошибок включен,
вызываю:
...
$command='sqlldr ...';
exec($command, $rezult);
var_dump($rezult);
...
при этом в $command мог бы быть и таким 'cmd /c d:\loader\test.bat'
test.bat
echo 222 >> d:\loader\test.txt
sqlldr ....
запрет на apache н моя тема - я уже много раз пробивал этот вопро - нет и все;
по поводу того, что не выполняется, так и это точно - так как в базе не появляется ничего, а вот если эту же команду запустить просто из CMD окна при прочих равных - то в табличке все появляется...
Sylex
да вывод ошибок включен,
вызываю:
...
$command='sqlldr ...';
exec($command, $rezult);
var_dump($rezult);
...
при этом в $command мог бы быть и таким 'cmd /c d:\loader\test.bat'
test.bat
echo 222 >> d:\loader\test.txt
sqlldr ....
Спустя 30 минут, 32 секунды (2.04.2009 - 15:37) sergeiss написал(а):
В файле test.bat в конце стоит команда exit? Иначе просто не будет возврата из командного файла.
Спустя 10 минут, 58 секунд (2.04.2009 - 15:48) asvlad написал(а):
sergeiss
что с exit, что без него скрипт далее работает нормально, а вот SQL*Loader не запускается...
что с exit, что без него скрипт далее работает нормально, а вот SQL*Loader не запускается...
Спустя 1 день, 18 минут, 54 секунды (3.04.2009 - 16:07) asvlad написал(а):
up
Спустя 4 часа, 5 минут, 51 секунда (3.04.2009 - 20:13) Sylex написал(а):
может здест ответ:
http://us2.php.net/manual/en/function.exec.php#85930
http://us2.php.net/manual/en/function.exec.php#85930
Спустя 2 дня, 12 часов, 25 минут, 3 секунды (6.04.2009 - 08:38) asvlad написал(а):
Sylex
описанное там пробовали - тот же результат - исполняюся некоторые EXE, типо calc.exe, но не SQL*Loader
описанное там пробовали - тот же результат - исполняюся некоторые EXE, типо calc.exe, но не SQL*Loader
Спустя 18 минут, 26 секунд (6.04.2009 - 08:56) sergeiss написал(а):
Вот еще какая мысль появлилась...
Ты говоришь, что из CMD.exe запускается нормально, а из ПХП ни одной командой не запускается.
А КАК ты запускаешь? Просто типа exec("myfile.exe")? Попробуй немного по-другому exec( "cmd.exe myfile.exe") (за синтаксис не ручаюсь на 100%). То есть, идея в том, чтобы вызвать cmd.exe с параметром в виде твоего исполняемого файла.
Другой вариант - а может, просто переделать немного алгоритм? У тебя автоматическая загрузка данных или человек управляет процессом?
Я с этим SQL*Loader не работал, поэтому не до конца понимаю, что ты там делаешь
Можно просто не использовать ПХП для загрузки данных. Почему именно он?
Вот смотри. У меня есть такая "фишка" в программе, похожая на твои "извраты". Надо загружать данные на сайт, которые сформированы в таблицах Paradox. Прога сделана (не мной) на Дельфи. Переделывать ее у меня нету ни желания, ни возможности
Поэтому я сделал так.
Моя прога на С++Билдер, находящаяся на клиентской машине, читает эти таблицы (собирает данные из разных таблиц в разных каталогах), делает нужные выборки, данные пишет в файлы сетевого диска, являющегося частью сервера. Такая возможность есть, т.к. сайт находится в локальной сети компании.
И уже затем (прямо из программы на С++Билдере) вызывается бат-файл, который грузит ПХП-скрипт на сайте, а скрипт уже знает, где лежат файлы для него.
Вот так приходится изворачиваться... Эта моя задача похожа в чем-то на твою, как мне кажется.
Ты говоришь, что из CMD.exe запускается нормально, а из ПХП ни одной командой не запускается.
А КАК ты запускаешь? Просто типа exec("myfile.exe")? Попробуй немного по-другому exec( "cmd.exe myfile.exe") (за синтаксис не ручаюсь на 100%). То есть, идея в том, чтобы вызвать cmd.exe с параметром в виде твоего исполняемого файла.
Другой вариант - а может, просто переделать немного алгоритм? У тебя автоматическая загрузка данных или человек управляет процессом?
Я с этим SQL*Loader не работал, поэтому не до конца понимаю, что ты там делаешь
Можно просто не использовать ПХП для загрузки данных. Почему именно он?
Вот смотри. У меня есть такая "фишка" в программе, похожая на твои "извраты". Надо загружать данные на сайт, которые сформированы в таблицах Paradox. Прога сделана (не мной) на Дельфи. Переделывать ее у меня нету ни желания, ни возможности
Поэтому я сделал так.
Моя прога на С++Билдер, находящаяся на клиентской машине, читает эти таблицы (собирает данные из разных таблиц в разных каталогах), делает нужные выборки, данные пишет в файлы сетевого диска, являющегося частью сервера. Такая возможность есть, т.к. сайт находится в локальной сети компании.
И уже затем (прямо из программы на С++Билдере) вызывается бат-файл, который грузит ПХП-скрипт на сайте, а скрипт уже знает, где лежат файлы для него.
Вот так приходится изворачиваться... Эта моя задача похожа в чем-то на твою, как мне кажется.
Спустя 5 часов, 20 минут, 36 секунд (6.04.2009 - 14:17) asvlad написал(а):
sergeiss
пробовал и "CMD.EXE /c sqlldr.exe..."
и "sqlldr.exe..." и формировать бат файл, при этом в бат файле исполняется все, кроме команд связанных с sqlldr.exe
Процессом управляет множетво лиц в филиалах через веб интерфейс:
1) из Excel файла юзера создается CSV (он создается нормально);
2) CSV в автомате должен загрузиться в общую базу
пробовал и "CMD.EXE /c sqlldr.exe..."
и "sqlldr.exe..." и формировать бат файл, при этом в бат файле исполняется все, кроме команд связанных с sqlldr.exe
Процессом управляет множетво лиц в филиалах через веб интерфейс:
1) из Excel файла юзера создается CSV (он создается нормально);
2) CSV в автомате должен загрузиться в общую базу
Спустя 2 часа, 29 минут, 42 секунды (6.04.2009 - 16:46) asvlad написал(а):
причину обнаружил и устранил - все оказалось в пользователе NT AUTHORITY\NETWORK SERVICE, от имени которого по умолчанию запускаются все внешние приложения в IIS6
Доменные политики каким-то образом ограничили активность этого пользователя.
Сменить эту настройку можно в AppPool, который выбран для конкретного виртуального каталога в IIS6
вот статья, которая мне помогла:
http://www.osp.ru/win2000/2005/03/177581/_p2.html
Доменные политики каким-то образом ограничили активность этого пользователя.
Сменить эту настройку можно в AppPool, который выбран для конкретного виртуального каталога в IIS6
вот статья, которая мне помогла:
http://www.osp.ru/win2000/2005/03/177581/_p2.html