Обновление: после нескольких поисков выясняется, что Azure может ограничить мою способность выполнять определенные команды оболочки. В настоящее время у меня есть план Standard 1 Web App — что мне нужно сделать, чтобы иметь возможность использовать утилиту BCP через PHP?
Поэтому в моем веб-приложении Azure запущен PHP-скрипт, и я пытаюсь использовать BCP для загрузки данных. Мне удалось успешно выполнить команду через консоль Azure, но у меня возникли проблемы при запуске через PHP.
PHP-код:
$upload_dir = '../uploads';
$test = shell_exec("bcp [database].[dbo].[Group] IN $upload_dir/working/Group.csv -S <server>; -T -f $upload_dir/format/Group.fmt -F2");
die($test);
Когда я запускаю это, я не получаю ответ от сценария, и запрос к БД указывает, что загрузка была неудачной. Когда я пытаюсь сделать более простой тест, используя
$test = shell_exec("echo 'Hello World'");
die($test);
Я получаю ожидаемый вывод «Hello World».
Что касается структуры файлов, сценарий PHP находится в папке wwwroot / scripts, а файлы CSV и FMT — в файлах wwwroot / uploads / working / Group.csv и wwwroot / uploads / format / Group.fmt соответственно.
Что-то мне не хватает при попытке выполнить команды оболочки через PHP? Я довольно новичок в этом, поэтому я ценю всю помощь!
Спасибо!
По вашему описанию, похоже, что вы скопировали bcp.exe
а также bcp.dll
в каталог Azure Web Apps и попытался использовать оболочку env для выполнения bcp
команды. Поскольку путь к каталогу Azure Console по умолчанию является корневым каталогом веб-приложений Azure, я предполагаю, что структура вашего приложения будет выглядеть следующим образом:
wwwroot/
bcp.exe
bcp.dll
scripts/
uploads/
...
Согласно вашему фрагменту кода, ваш PHP-скрипт в scripts
Папка не может найти команду bcp, поэтому вы получили пустую страницу.
Вы можете попробовать переместить bcp.exe
а также bcp.dll
файлы в папку сценариев или измените команду оболочки, например, ../bcp db.dbo.table in ...
Если у меня возникнет какое-либо недопонимание по вашему вопросу, пожалуйста, дайте мне знать.
Других решений пока нет …