我正在使用1and1建议的确切代码通过mysqldump备份MySQL数据库(http://faq.1and1.co.uk/archive/43.html)
$host= 'xxxx';
$user= 'xxxx';
$pass= 'xxxx';
$db= 'xxxx';
system(sprintf(
'mysqldump --opt -h%s -u%s -p%s %s | gzip > %s/backup/' . time() . '.sql.gz',
$host,
$user,
$pass,
$db,
getenv('DOCUMENT_ROOT')
));
为了测试目的,已将所有权限更改为777.仍然没有运气.继续获取错误(写时错误32).
任何帮助表示赞赏-这似乎是一个愚蠢的修复.
解决方法:
如果您是通过cron作业执行此操作,则DOCUMENT_ROOT将不存在. Web服务器有效地设置了DOCUMENT_ROOT和其他$_SERVER变量(请参见the $_SERVER manual page),并且如果直接从cron运行脚本,则不涉及Web服务器.参见this earlier, similar question.
尝试设置相对于PHP脚本位置的备份目录的路径.例如,如果您的脚本位于… / your_folder / scripts / backup_script.php中,而您(预先创建的)备份目录为… / your_folder / backup /,则
$backup_dir = dirname(__FILE__) . '/../backup';
…然后使用$backup_dir代替getenv(‘DOCUMENT_ROOT’).
看起来您的主机说明是正确的,但是仅当从Web服务器而不是从命令行运行脚本时才如此.