Эта тема на forum.dklab.ru


*Макс: passthru(); или как сделать database_backup ? :)
Я решил сделать database_backup в базы данных. Порылся в интернете и на форуме ДКЛАБ.РУ.... и
... и откапал скрипт database_backup.
Вроде все в порядке на первый взгляд, но почему то вместо backup на почту приходит пустой файл ГЗ....)-:
---
запуск скрипта выводит вот чего:
Warning: filetype(): Lstat failed for (null) (errno=2 - No such file or directory) on line 83
Warning: fopen(): Unable to access ...............................am_sql.tar.gz in on line 89
Warning: fopen(...........sql.tar.gz): failed to open stream: Permission denied in on line 89
Warning: filesize(): Stat failed for .........sql.tar.gz (errno=2 - No such file or directory) on line 90
Warning: fread(): supplied argument is not a valid stream resource in on line 90
Warning: fclose(): supplied argument is not a valid stream resource in on line 91

сам скриптик..
<?php
// configure your database variables below:
$dbhost = 'localhost'; // Server address of your MySQL Server
$dbuser = 'dbdbdbdbdbdbd'; // Username to access MySQL database
$dbpass = '*************'; // Password to access MySQL database
$dbname = 'dtdtdtdtdtdtd'; // Database Name

// Optional Options You May Optionally Configure

$use_gzip = "yes"; // Set to No if you don't want the files sent in .gz format
//$remove_sql_file = "yes"; // Set this to yes if you want to remove the .sql file after gzipping. Yes is recommended.
$remove_sql_file = "no"; // Set this to yes if you want to remove the .sql file after gzipping. Yes is recommended.
$remove_gzip_file = "no"; // Set this to yes if you want to delete the gzip file also. I recommend leaving it to "no"

// Configure the path that this script resides on your server.

$savepath = "{$DOCUMENT_ROOT}/temp/dbsender";
echo "$savepath <br><br>";
//$savepath = "/www/htdocs/dbsender"; //

$send_email = "yes"; // Do you want this database backup sent to your email? Fill out the next 2 lines
$to = "m@madre.ru"; // Who to send the emails to
$from = "p@padre.ru"; // Who should the emails be sent from?

$senddate = date("j F Y");

$subject = "MySQL Database Backup - $senddate"; // Subject in the email to be sent.
$message = "Your MySQL database has been backed up and is attached to this email"; // Brief Message.


//$use_ftp = "yes"; // Do you want this database backup uploaded to an ftp server? Fill out the next 4 lines
$use_ftp = "no"; // Do you want this database backup uploaded to an ftp server? Fill out the next 4 lines
$ftp_server = "localhost"; // FTP hostname
$ftp_user_name = "ftp_username"; // FTP username
$ftp_user_pass = "ftp_password"; // FTP password
$ftp_path = "/"; // This is the path to upload on your ftp server!

// Do not Modify below this line! It will void your warranty!

$date = date("mdy-hia");
$filename = "$savepath/$dbname-$date.sql";

echo "$filename <br><br>";

passthru("mysqldump --opt -h$dbhost -u$dbuser -p$dbpass $dbname >$filename");

if($use_gzip=="yes"){
$zipline = "tar -czf ".$dbname."-".$date."_sql.tar.gz $dbname-$date.sql";
@shell_exec($zipline); // @
}
if($remove_sql_file=="yes"){
exec("rm -r -f $filename");
}

if($use_gzip=="yes"){
$filename2 = "$savepath/".$dbname."-".$date."_sql.tar.gz";
} else {
$filename2 = "$savepath/$dbname-$date.sql";
}


if($send_email == "yes" ){
$fileatt_type = filetype($filename2); // @
$fileatt_name = "".$dbname."-".$date."_sql.tar.gz";

$headers = "From: $from";

// Read the file to be attached ('rb' = read binary)
$file = fopen($filename2,'rb'); // @
$data = fread($file,filesize($filename2)); // @
fclose($file); // @

// Generate a boundary string
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

// Add the headers for a file attachment
$headers .= "\nMIME-Version: 1.0\n" ."Content-Type: multipart/mixed;\n" ." boundary=\"{$mime_boundary}\"";

// Add a multipart boundary above the plain message
$message = "This is a multi-part message in MIME format.\n\n" ."--{$mime_boundary}\n" ."Content-Type: text/plain; charset=\"iso-8859-1\"\n" ."Content-Transfer-Encoding: 7bit\n\n" .
$message . "\n\n";

// Base64 encode the file data
$data = chunk_split(base64_encode($data));

// Add file attachment to the message
$message .= "--{$mime_boundary}\n" ."Content-Type: {$fileatt_type};\n" ." name=\"{$fileatt_name}\"\n" ."Content-Disposition: attachment;\n" ." filename=\"{$fileatt_name}\"\n" ."Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" ."--{$mime_boundary}--\n";

// Send the message
$ok = @mail($to, $subject, $message, $headers);
if ($ok) {
echo " $filename2 <br><br>";
} else {
echo "Sorry! <br><br>";
}
}

if($use_ftp == "yes"){
$ftpconnect = "ncftpput -u $ftp_user_name -p $ftp_user_pass -d debsender_ftplog.log -e dbsender_ftplog2.log -a -E -V $ftp_server $ftp_path $filename2";
shell_exec($ftpconnect); // @
echo "$filename2 <br><br>";

}

if($remove_gzip_file=="yes"){
exec("rm -r -f $filename2");
}

?>

одним словом, полезная штука, но неработает, вчем дело непойму... )-:
Anonymous:
И? Вам ошибки на русский первести или на translate.ru сами сходите?
Anonymous:
для ленивого и невоспитанного гостя.

---
Запуск скрипта выводит вот чего:
Предупреждение: filetype (): Lstat не потерпел неудачу для (пустого указателя) (errno=2 - Никакой такой файл или справочник) на линии 83
Предупреждение: fopen (): Неспособный к доступу ............................... am_sql.tar.gz в на линии 89
Предупреждение: fopen (........... sql.tar.gz): потерпел неудачу, чтобы открыть поток: Разрешение, отклоненное в на линии 89
Предупреждение: filesize (): Stat не потерпел неудачу для ......... sql.tar.gz (errno=2 - Никакой такой файл или справочник) на линии 90
Предупреждение: fread (): снабженный аргумент(спор) - не имеющий силу ресурс потока в на линии 90
Предупреждение: fclose (): снабженный аргумент(спор) - не имеющий силу ресурс потока в на линии 91
Anonymous:
Warning: filetype(): Lstat failed for (null) (errno=2 - No such file or directory) on line 83
Предупреждение: filtype(): Ошибка при выполнении Lstat для (null)(errno=2 - Нет такого файла или директории) в 83 строке
Warning: fopen(): Unable to access ...............................am_sql.tar.gz in on line 89
Предупреждение: fopen(): невозможен доступ к ...............................am_sql.tar.gz в 89 строке
Warning: fopen(...........sql.tar.gz): failed to open stream: Permission denied in on line 89
Предупреждение: fopen(...........sql.tar.gz): Ошибка при открытии потока: В доступе отказано в 89 строке
Warning: filesize(): Stat failed for .........sql.tar.gz (errno=2 - No such file or directory) on line 90
Предупреждение: filesize(): Ошибка при выполнении stat для .........sql.tar.gz (errno=2 - Нет такого файла или директории)в 90 строке
Warning: fread(): supplied argument is not a valid stream resource in on line 90
Предупреждение: fread(): Данный аргумент не является потоковым ресурсом в 90 строке
*Макс:
Скорее причина в команде..
passthru("mysqldump --opt -h $dbhost -u $dbuser -p $dbpass $dbname > $filename");

или нет на нее разрешения..(
Дмитрий Котеров:
А может, просто error_reporting слишком велик для данного скрипта?
*Макс:
Протестировал "ЕРОРЫ" - уложил файлы, эмитировав их присутствие, "ЕРОРЫ" пропали, поставил в строку passthru("mysqldump --opt -h$dbhost -u$dbuser -p$dbpass $dbname >$filename"); вот что passthru("mysqldump --opt -h$dbhost -u$dbuser -p$dbpass $dbname >$filename") or die ("ERROR: passthru"); стало выводить именно в нем ошибку... (

хостер говорит что: ....скорее всего запрещена из-за safemode можем выключить его...

): что?

Эта тема на forum.dklab.ru