由于某种原因bash脚本不能在php中执行
问题描述:
所以我写了一个bash脚本,它需要2个参数。存储在对象存储由于某种原因bash脚本不能在php中执行
- 本地文件名
- 文件名。
我想PHP脚本能够运行这一点,所以我写了这样的事情:
<?php
$output = shell_exec("./uploadFile.sh 'confirmation.txt' 'test_conf_script'");
echo $output;
?>
这显然是硬编码,但工作正常使用命令:
php -f test.php
。
现在,我想我的web应用程序能够使用相同的bash脚本上传文件到对象存储,所以我修改了我的PHP脚本是这样的:
<?php
$target_dir = "./upload/";
$name = (string)$_POST['name'];
$file_name = (string)basename($_FILES["file"]["name"]);
$target_file = $target_dir . basename($_FILES["file"]["name"]);
$file_type = $_FILES["file"]["type"];
$file_size = $_FILES["file"]["size"];
if(move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)){
echo "Upload\n";
}
else{
echo "couldn't upload!";
}
$output = shell_exec("./uploadFile.sh '$file_name' '$name'");
echo "./uploadFile.sh '$file_name' '$name'";
?>
我的前端提供了脚本与文件,我确实在本地看到我的文件。
但是上传使用了shell_exec不工作的对象存储..
看来自的bizzare它完全一样的test.php的文件,虽然从终端,当我的前端触发此PHP脚本它不起作用。
答
你有没有试过this:
你可能需要调用脚本之前CHDIR到正确的目录。这种方式可以确保你的脚本是什么目录“中”调用shell命令
$old_path = getcwd();
chdir('/my/path/');
$output = shell_exec('./script.sh var1 var2');
chdir($old_path);
+0
我的工作目录是/ var/www/html/ajax,它与uploadFile.sh的位置相同。我不认为它与目录的问题,因为我的test.php文件工作得很好。它包含相同的代码来执行shell,只是对文件名和名称变量进行了硬编码。我使用echo语句确保这些变量是正确的。 –
前检查'uploadFile.sh'的权限(所有者:组),这是有可能的地方问题是... –
uploadFile.sh的权限-rwxr-xr-x –
用'echo getcwd();'检查当前的工作目录。你是否在'uploadFile.sh'文件夹中? – hek2mgl