我希望您能够从php页面执行一个shell脚本,该脚本将执行一个MySQL命令。
为了实现这一点,我按照此处所示的方式进行操作:https://dev59.com/mWsz5IYBdhLWcg3wNU8R#8055745 以下是我的
现在,当我从服务器控制台或php页面
但是,当我将MYSQL用户和密码放在
所以,请帮助我解决这个问题。
为了实现这一点,我按照此处所示的方式进行操作:https://dev59.com/mWsz5IYBdhLWcg3wNU8R#8055745 以下是我的
sqlscript.sh
文件。#!/bin/sh
sudo wget -t 50 -O /tmp/update.sql http://example.com/update.sql
if [ $? -eq 0 ]; then
mysql -h "localhost" -u "root" "-pXXXXXXXX" "database-name" < "/tmp/update.sql"
if [ $? -eq 0 ]; then
sudo rm /tmp/update.sql
echo "200"
else
echo "502"
fi
else
echo "404"
fi
我的php页面是runscript.php
<?php
shell_exec("sudo /path/to/script/sqlscript.sh");
?>
现在,当我从服务器控制台或php页面
runscript.php
调用sqlscript.sh
时,它能够完美地运行并返回预期的200
。但是,当我将MYSQL用户和密码放在
~/.my.cnf
中,这样我就不必在命令行中输入它们:[client]
user = root
password = XXXXXXXX
并且在 sudoer
中添加了凭据,以便无需密码执行此脚本。
User_Alias WWW_USER = www-data
Cmnd_Alias WWW_COMMANDS_SQL = /path/to/script/sqlscript.sh
WWW_USER ALL = (ALL) NOPASSWD: WWW_COMMANDS_SQL
这是我的 sqlscript.sh
文件
#!/bin/sh
sudo wget -t 50 -O /tmp/update.sql http://example.com/update.sql
if [ $? -eq 0 ]; then
mysql -h "localhost" "database-name" < "/tmp/update.sql"
if [ $? -eq 0 ]; then
sudo rm /tmp/update.sql
echo "200"
else
echo "502"
fi
else
echo "404"
fi
现在,当我从服务器控制台调用sqlscript.sh
时,它能够完美地运行并按预期返回200
。但如果我从php页面调用,则会发生什么情况?
http://example.com/runscript.php
当无法执行SQL命令时,它会返回502
。
更新:
这是Apache的error.log
日志。
--2014-12-05 10:51:55-- http://example.com/update.sql
Resolving example.com (example.com)... 162.144.71.XXX
Connecting to example.com (example.com)|162.144.71.XXX|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 146 [text/x-sql]
Saving to: `/tmp/update.sql'
0K 100% 10.9M=0s
2014-12-05 10:51:55 (10.9 MB/s) - `/tmp/update.sql' saved [146/146]
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
所以,请帮助我解决这个问题。
<?php shell_exec("/path/to/script/sqlscript.sh"); ?>
我按照说明更改了php页面,但是得到了
404
错误。 - kuttumiah