【问题标题】:Email $_FILES['name'] as list电子邮件 $_FILES['name'] 作为列表
【发布时间】:2014-12-31 21:53:31
【问题描述】:

用户完成上传多个文件后,我会在屏幕上显示上传的文件。我还尝试在电子邮件正文中包含相同的列表。绝对一切正常,包括在屏幕上显示每个文件,除了 $message_body 只列出数组中的最后一个文件名。有什么想法吗??

<!DOCTYPE html>
<html>
<head>
<title>upload</title>
</head>
<body>
<?php

if(isset($_POST['ship-it']) AND $_POST['ship-it'] === "yes") {
    $yesupload = $_POST['ship-it'];
    preg_match("/yes/", "".$yesupload."");

    for($i=0; $i<count($_FILES['tray']['name']); $i++) {
         $filename = $_FILES['tray']['name'][$i];
         $s_name = $_FILES['tray']['tmp_name'][$i];
         move_uploaded_file($s_name, 'https://example.com/inbox/'.$filename.'');
    }
    $info = $_SERVER['HTTP_USER_AGENT'];
    $message_body = "".$_POST["email"]." uploaded the file: ".$_FILES['tray']['name']."
    https://example.com/inbox/".rawurlencode($filename)."

    User Agent: ".$_POST["id"]." ".$info."";

    $mail_options = [
        'sender' => 'sender@gmail.com',
        'to' => 'receiver@gmail.com',
        'subject' => 'new file sent',
        'textBody' => $message_body
    ];

    try {
        $message = new Message($mail_options);
        $message->send();
    } catch (InvalidArgumentException $e) {
        echo 'error: ';
    }
    echo "<p>All done. Here's what you sent:</p>";
    for($i = 0; $i < count($_FILES['tray']['name']); $i++)
    {
        echo "<ul style='list-style-type:square'>
            <li>{$_FILES['tray']['name'][$i]}</li>
            </ul>";
    }
}
?>
<form action="<?php echo $upload_url?>" method="post" enctype="multipart/form-data">
   <p>Files to upload: </p> <br>
   <input type="hidden" name="ship-it" value="yes">
   <input type="hidden" name="id" value="<?php echo $_SERVER['REMOTE_ADDR']?>">   
   <input type="email" name="email" required="" autofocus placeholder="Your email address"><br><br>
   <input type="file" multiple name="tray[]"  required="">
   <input  type="submit" value="Upload"><br><br>
</form>
</body>
</html>

【问题讨论】:

  • 当你在屏幕上显示你的消息时你正在循环$_FILES['tray']['name'],但你在构建消息体时没有这样做。
  • 1.似乎 _https://url 在move_uploaded_file 中不存在。 2.preg_match的电话不清楚。
  • ^^^ 完全正确 ^^^ 使用服务器路径而不是 URL。
  • 谢谢杰罗恩。我在第一次收到每个文件的电子邮件时偶然发现了这一点。
  • Deadooshka 和 Fred,谢谢。为公开发布编辑了服务器路径。文件上传正确。

标签: php arrays foreach each


【解决方案1】:

您之前的代码似乎将$_FILES['tray']['name'] 视为一个数组。您是否尝试过用逗号将其从数组转换为字符串:

 $message_body = "".$_POST["email"]." uploaded the file: ".implode(", ",$_FILES['tray']['name'])."https://example.com/inbox/".rawurlencode($filename)."

【讨论】:

  • 谢谢,Mainstreetmark。下次我会试试这个。
【解决方案2】:

您已经有一个循环显示网页上的文件名。您需要一个类似的循环来将文件名存储在$message_body 中。您可以将其合并到您已经拥有的用于移动上传文件的循环中。也许是这样的:

$message_body = "".$_POST["email"]." uploaded these files:\n";

for($i=0; $i<count($_FILES['tray']['name']); $i++) {

  $filename = $_FILES['tray']['name'][$i];
  $s_name = $_FILES['tray']['tmp_name'][$i];
  move_uploaded_file($s_name, 'https://example.com/inbox/'.$filename.'');

  $message_body .= "* " . $_FILES['tray']['name'][$i]
                .  "-> https://example.com/inbox/" . rawurlencode($filename)
                .  "\n";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多