无法在 PHP 页创建的 shell 脚本中执行 sqlplus 命令

Can't execute sqlplus commands in shell script created by PHP page

TL;DR:

我有一个 PHP 页面执行包含 impdp 的 shell 脚本,该脚本将转储导入新模式。
PHP 文件:

echo shell_exec("./DumpCreator.sh 22");

DumpCreator.sh

#!/bin/bash
echo 
impdp U_/Pass DIRECTORY=dmpdir DUMPFILE=MYDMP.DMP remap_schema=PARENT:U_

它 echos 22 但是 impdp 没有执行,尽管所有权限都授予了单个用户(管理员)。

完整

我有一个 PHP 页面,它创建一个 shell 脚本文件并覆盖其内容,如下所示:

$shellFile = fopen("myfile.sh" , "w");
$field = "1";
$command = "#!/bin/bash\n"
    ."echo $field\n"
    ."sqlplus system/pass as sysdba << SQLEND\n"
    ."create user U_$field identified by newpass;\n"
    ."grant dba to U_$field;\n"
    ."exit;\n"
    ."SQLEND\n";
fwrite($shellFile, $command);
$output = shell_exec("bash myfile.sh");
echo $output;
fclose($shellFile);

.sh 文件的内容

#!/bin/bash
echo 1
sqlplus system/pass sysdba << SQLEND
create user U_1 identified by pass;
grant dba to U_1;
exit;
SQLEND

我的问题是 sqlplus 的一部分没有执行。 那么这有什么问题,在此先感谢。 更新
当我执行 .sh 文件本身时,一切都执行良好(添加用户并 g运行ted)。
更新 2
我尝试使用 php oci 进行上述操作,并且 运行 成功。
现在的问题是,当用户获得 g运行ted 权限时,我需要使用脚本将一些转储复制到它,我将需要使用 PHP 执行该脚本。
我的新 .sh 文件

#!/bin/bash
echo 
impdp U_/pass DIRECTORY=DATA_PUMP_DIR DUMPFILE=something.DMP remap_schema=something:U_

即使我删除了 $1,它也不会执行这部分,我认为它不需要 sudosu 到 root,所以我做错了什么?在此过程中还可能缺少哪些权限?

更新 3
使用安装 Oracle 的 'admin' 帐户直接从终端执行脚本,同时在 PHP 中获取当前用户表明它是 'admin'.
所以问题是如何从我的 PHP 页面执行任何非 os 相关命令(除了 echo、ls .. 等)?

所以在搜索权限之后,我发现可以通过编辑 sudoers 文件来执行任何操作(root 或非 root 命令),这将允许任何 php 执行任何命令,就我而言可以看出这是一个非常糟糕的解决方案。
参考:How to call shell script from php that requires SUDO?

确保您设置了所需的环境变量。

特别是您可能必须将 LD_LIBRARY_PATH 设置为 Oracle 安装附带的共享库的位置。

PHP 代码可能隐藏了与此相关的错误消息。

比较你平时运行SQL*Plus或IMP运行ningoraenv前后的环境,你至少需要设置几个那些(如果不是全部,也可能是大多数)。