上传通过电子邮件发送链接以下载文件

时间:2010-04-12 20:17:25

标签: php jquery file-upload

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 :(得分:0)

类似的东西:

<?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 );
//...

答案 1 :(得分:0)

您的脚本容易受到文件名冲突的影响。您是使用用户提供的原始名称上传的。如果多次使用相同的文件名,您将使用新文件覆盖以前的版本。

同样,您盲目地使用表单值来指定存储上载的位置。如果有人为文件夹指定“../../../../../../../../../etc”,为文件名指定“passwd”,会发生什么?或者在Windows服务器上“../../../../../../../../windows/system32”和“ntoskrnl.exe”?如果网络服务器错误配置了它正在运行的用户ID,那么您刚刚打开机器进行完全远程攻击。但即使他们不想破坏系统,他们也能够轻松地删除站点文档根目录中的任何文件。

话虽如此,如果要嵌入直接下载文件的链接,则必须构建HTML格式的电子邮件,或者希望邮件客户端可以自动链接看起来像URL的文本。构建用于mail()函数的HTML邮件是一件非常痛苦的事。我将PHPMailer用于我的项目。它运行良好,允许您构建任何类型的电子邮件。