我有一个 sh 脚本,当我以 root 用户在命令行运行它时,它运行良好。这将创建一个数据库和一个带密码的用户。
$ ./create-database.sh dbname dbuser dbpass
#!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>log.out 2>&1
# Everything below will go to the file 'log.out':
# Functions
ok() { echo -e '\e[32m'$1'\e[m'; } # Green
EXPECTED_ARGS=3
E_BADARGS=65
MYSQL=`which mysql`
Q0="DROP DATABASE IF EXISTS $1;"
Q1="CREATE DATABASE IF NOT EXISTS $1;"
Q2="GRANT ALL ON $1.* TO '$2'@'localhost' IDENTIFIED BY '$3';"
Q3="FLUSH PRIVILEGES;"
SQL="${Q0}${Q1}${Q2}${Q3}"
if [ $# -ne $EXPECTED_ARGS ]
then
echo "Usage: $0 dbname dbuser dbpass"
exit $E_BADARGS
fi
$MYSQL -u root -pXXXXXXX -e "$SQL"
ok "Database $1 and user $2 created with a password $3"
当我使用 php 运行时,同一个文件不起作用。 PHP代码如下,在sh文件所在的文件夹中。
<?php
$db_name = $_GET['db_name'];
$db_user = $_GET['db_user'];
$db_pass = $_GET['db_pass'];
$output = shell_exec ("sh ./create-database.sh $db_name $db_user $db_pass");
echo "Output $output";
PHP 脚本具有 777 权限,并在用户 pakerp 拥有的应用程序中运行
log.out 文件给我以下错误
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
当我在命令行运行时,相同的脚本运行良好。
我错过了什么。请告诉我。
最佳答案
您可能需要在本地主机上允许 root 或更好地使用非 root 用户!
关于php - 使用 PHP 应用程序使用 .sh 文件创建用户和数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64099397/