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

标签 php linux shell sqlplus

长话短说:

我有一个 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,它也不会执行这部分,我认为它不需要 sudosu 到 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/

相关文章:

php - 连接到免费托管数据库时出错

php - 扩展 WooCommerce 产品过滤器插件短代码

Linux:.sh 脚本中的程序没有输出

shell - 将参数作为数组从 shell 传递到 awk

bash - 用于打开 GNU screen 或具有许多相同进程的类似脚本

java - 从命令行运行JAR文件并指定类路径

php - 添加参数到 URL 限制

php - Php 中的多子数组

c++ - Mac 和 Linux 上的 SDL IMG_Load() 为同一图像返回不同的 BitsPerPixel

c++ - Unix 和 Linux API header 是否与 C++ 兼容?