После загрузки по электронной почте ссылка для скачивания файла - PullRequest
1 голос
/ 13 апреля 2010

Uploadify - это плагин jQuery, который позволяет легко интегрировать множественные (или одиночные) загрузки файлов на ваш сайт. Требуется Flash и любой язык разработки бэкэнда. Массив опций обеспечивает полную настройку для опытных пользователей, но базовая реализация настолько проста, что даже новички в кодировании могут это сделать.

Я хотел спросить, можно ли отправить ссылку на файл, который был только что загружен, по электронной почте с уведомлением Uploadify.

Вот код для uploadify.php:

<?php
if (!empty($_FILES)) {
    $tempFile = $_FILES['Filedata']['tmp_name'];
    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
    $targetFile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];

    // $fileTypes  = str_replace('*.','',$_REQUEST['fileext']);
    // $fileTypes  = str_replace(';','|',$fileTypes);
    // $typesArray = split('\|',$fileTypes);
    // $fileParts  = pathinfo($_FILES['Filedata']['name']);

    // if (in_array($fileParts['extension'],$typesArray)) {
        // Uncomment the following line if you want to make the directory if it doesn't exist
        // mkdir(str_replace('//','/',$targetPath), 0755, true);

        move_uploaded_file($tempFile,$targetFile);
        echo "1";
    // } else {
    //  echo 'Invalid file type.';
    // }
}

//define the receiver of the email
$to = 'admin@admin.com';
//define the subject of the email
$subject = 'Test email';
//define the message to be sent. Each line should be separated with \n
$message = "Hello World!\n\nThis is my first mail.";
//define the headers we want passed. Note that they are separated with \r\n
$headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com";
//send the email
$mail_sent = @mail( $to, $subject, $message, $headers );
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
echo $mail_sent ? "Mail sent" : "Mail failed";
?>

Ответы [ 2 ]

0 голосов
/ 13 апреля 2010

Ваш скрипт уязвим к конфликтам имен файлов. Вы загружены с использованием исходного имени, предоставленного пользователем. Если одно и то же имя файла используется более одного раза, предыдущие версии будут перезаписаны новыми.

Кроме того, вы слепо используете значение формы, чтобы указать место для сохранения загрузки. Что произойдет, если кто-то укажет "../../../../../../../../../etc" для папки и "passwd" для имени файла? Или на сервере Windows "../../../../../../../../windows/system32" и "ntoskrnl.exe"? Если веб-сервер неверно сконфигурирован относительно того, на каком идентификаторе пользователя он работает, вы только что открыли машину для полного удаленного компромисса. Но даже если они не захотят скомпрометировать систему, они смогут с легкостью удалить любой файл в корне документа вашего сайта.

Сказав, что, если вы хотите встроить ссылку для прямой загрузки файла, вам придется создать электронное письмо в формате HTML или надеяться, что почтовый клиент сможет автоматически связывать текст, который выглядит как URL-адреса. Создание HTML-писем для использования с функцией mail() является серьезной болью. Я использую PHPMailer для своих проектов. Он отлично работает и позволяет создавать любые электронные письма, которые вам нравятся.

0 голосов
/ 13 апреля 2010

Что-то вроде:

<?PHP
$fileURL = 'http://' . $_SERVER['HTTP_HOST'] . $_REQUEST['folder'] . '/' . $_FILES['Filedata']['name'];

// ...

$message = "You can download the file from: {$fileURL}";

// ...
$mail_sent = @mail( $to, $subject, $message, $headers );
//...
...