PHP-mysqldump:写入errno 32(1and1共享主机)作为crontab

我正在使用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服务器而不是从命令行运行脚本时才如此.

上一篇:WCF:在IIS和Windows服务中托管之间的区别


下一篇:如何在asp.net中获取GridView隐藏列的值?