2016-11-27 40 views
0

更新:经过大量搜索之后,似乎Azure可能会限制我执行某些shell命令的能力。我目前正在使用Standard 1 Web App计划 - 我需要做些什么才能够通过PHP使用BCP实用程序?从Azure PHP网络应用程序执行BCP

所以我有一个PHP脚本运行在我的Azure网络应用程序,我一直在尝试使用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执行shell命令时,是否有某些东西丢失?我很新,所以我感谢所有的帮助!

谢谢!

+0

你有任何更新? –

回答

0

根据您的描述,似乎您已将bcp.exebcp.dll复制到Azure Web Apps目录,并尝试使用shell env执行bcp命令。由于Azure的控制台的默认目录路径是Azure的Web应用程序的根目录,所以我想你的应用程序的结构如下所示:

wwwroot/ 
     bcp.exe 
     bcp.dll 
     scripts/ 
     uploads/ 
     ... 

根据您的代码段,在scripts文件夹你的PHP脚本找不到bcp命令,所以你有空白页面。

您可以尝试将bcp.exebcp.dll文件移动到脚本文件夹中,或者修改shell命令,例如../bcp db.dbo.table in ...

如果我对你的问题有任何误解,请随时告诉我。

+0

感谢您的回答 - 自Azure Web应用程序服务器在Windows Server上运行以来,默认情况下安装了BCP。问题在于服务器不允许我使用bcp或其他命令(如ls)运行shell_exec。我最终创建了一个单独的虚拟机,我可以运行BCP。 – user2884505