长话短说:
我有一个 PHP 页面,它执行一个包含 impdp
的 shell 脚本,它将转储导入一个新的模式。
PHP 文件:
echo shell_exec("./DumpCreator.sh 22");
DumpCreator.sh
#!/bin/bash
echo $1
impdp U_$1/Pass DIRECTORY=dmpdir DUMPFILE=MYDMP.DMP remap_schema=PARENT:U_$1
它回显 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 文件本身时,一切都执行良好(添加并授予用户)。
更新 2
我尝试使用 php oci 执行上面提到的操作并且它成功运行。
现在的问题是,当用户被授予权限时,我需要使用脚本将一些转储复制到它,我将需要使用 PHP 执行该脚本。
我的新 .sh 文件
#!/bin/bash
echo $1
impdp U_$1/pass DIRECTORY=DATA_PUMP_DIR DUMPFILE=something.DMP remap_schema=something:U_$1
即使我删除了 $1,它也不会执行这部分,我认为它不需要 sudo
或 su
到 root,所以我在做什么错误的 ?在此过程中还可能缺少哪些权限?
更新 3
使用安装 Oracle 的“admin”帐户直接从终端执行脚本,同时在 PHP 中获取当前用户显示它是“admin”。
所以问题是如何从我的 PHP 页面执行任何与操作系统无关的命令(除了 echo、ls .. 等)?
最佳答案
所以在搜索权限之后,我发现可以通过编辑 sudoers 文件来执行任何操作(root 或非 root 命令),这将允许任何 php 执行任何命令,据我所知这是一个非常糟糕的解决方案。
引用:How to call shell script from php that requires SUDO?
关于php - 无法在PHP页面创建的shell脚本中执行sqlplus命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34396439/