Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 列出前端目录中的PDF文件,并允许用户单击文件并发送电子邮件?_Javascript_Php_Joomla - Fatal编程技术网

Javascript 列出前端目录中的PDF文件,并允许用户单击文件并发送电子邮件?

Javascript 列出前端目录中的PDF文件,并允许用户单击文件并发送电子邮件?,javascript,php,joomla,Javascript,Php,Joomla,我的网站服务器上有一个目录,其中包含很多PDF文件 有没有办法在我的网站前端显示这个目录?因此,所有文件都将以列表格式列出。然后,我可以通过复选框或类似的方式“单击”一个文件,然后通过电子邮件发送该文件 我正在使用Joomla,所以这很可能是一个自定义模块。我已经知道如何使用查询列出文件,但是查询会使服务器过载(503错误),因为实际上需要显示很多文件。您需要控制选择了多少文件。在页面上显示大量文件/复选框是个坏主意。尤其是如果有这么多文件,你无法查询所有文件而不出错。(503错误可能还有其他原

我的网站服务器上有一个目录,其中包含很多PDF文件

有没有办法在我的网站前端显示这个目录?因此,所有文件都将以列表格式列出。然后,我可以通过复选框或类似的方式“单击”一个文件,然后通过电子邮件发送该文件


我正在使用Joomla,所以这很可能是一个自定义模块。我已经知道如何使用查询列出文件,但是查询会使服务器过载(503错误),因为实际上需要显示很多文件。

您需要控制选择了多少文件。在页面上显示大量文件/复选框是个坏主意。尤其是如果有这么多文件,你无法查询所有文件而不出错。(503错误可能还有其他原因。)我们在谈论多少PDF?无论如何

如果只显示100个文件,而我选择全部100个,会发生什么。您的代码将向我发送一封包含100个附件的电子邮件。(即使是100封也会失败,电子邮件并不适用于此。)然后,如果我真的喜欢您的pdf,我所做的一切就是整天坐在我的电脑前,点击“提交”按钮反复发送一封电子邮件,每次按按钮都会发送100个附件。现在想象100个人都这样做。我相信你明白了,这会很快破坏你服务器的资源

如果可以从数据库中获取文件名,那么这可能是最好的方法。我会对结果进行分页,所以一次只显示20个文件。我只允许用户选择每次提交的最大文件量,因为电子邮件的功能很可能受到限制。我甚至可以控制用户在给定时间段内执行此功能的频率,以防止滥用

我还会考虑直接将文件从服务器下载到用户的计算机,并完全绕过电子邮件,除非这不在当前项目的目标范围内

但是这些都是在你构建这个系统时要牢记的主题。但是为了得到一个概念的证明。看看下面

第1步-下载PHPMailer并启动它,这样您就可以调用
$mail=newphpmailer在页面上,它不会出错。以下是一个链接:

第2步-搜索文件夹结构或数据库,并返回包含文件路径的数组

步骤3-在阵列上循环并填充复选框

步骤4-创建PHPMailer对象并添加对象属性-发送电子邮件

require('path/to/PHPMailerClass'); //Or the path to the autoloader if that is how you installed.

$path = '/root/path/to/pdfFiles/';
$array = array_map('basename', glob($path . '*.pdf')); //This will return all pdf files in the directory.

echo
'<form action="" method="post">';

foreach($array as $file){

   echo '<input name="fileName[]" type="checkbox" value="' . $file . '">' . $file . '<br>';

}

echo '<input name="send_email" type="submit" value="Send Email">';

echo
'</form>';

//You will need an array containing the user's information.
$userData = array(

  'name' => 'John Doe',
  'email' => 'John.Doe@example.com'

);

if(isset($_POST['send_email']) && $_POST['send_email']){ //Make sure they hit submit.

  if(isset($_POST['fileName']) && $_POST['fileName']){ //Make sure they selected a file.

    if(count($_POST['fileName']) > 5){

      echo 'You can only select 5 files.';
      exit();
    }

    //Set up the email.
    $mail = new PHPMailer;
    $mail->setFrom('from@example.com', 'Your Name');
    $mail->addAddress($userData['email'], $userData['name']);
    $mail->Subject  = 'This is how to send attachments.';
    $mail->isHTML(true);
    $mail->Body = $userData['name'] . ',<br>' .
    'Here are the files you selected!';

    //Here is the attachment part.
    foreach($_POST['fileName'] as $file){ //Loop across the selected files.
      $mail->AddAttachment($path . $file, $file, 'base64', 'application/pdf');  //Attach the file.
    }

    if(!$mail->send()) { //Send the mail.
      echo 'Message was not sent.';
      echo 'Mailer error: ' . $mail->ErrorInfo;
    } else {
      echo 'Message has been sent.';
    }

}else{

  echo 'No file was selected.';

  }

}
require('path/to/PHPMailerClass')//或者自动加载器的路径(如果您是这样安装的)。
$path='/root/path/to/pdfFiles/';
$array=array_map('basename',glob($path.*.pdf')//这将返回目录中的所有pdf文件。
回声
'';
foreach($array作为$file){
回显'.$file.'
'; } 回声'; 回声 ''; //您需要一个包含用户信息的数组。 $userData=array( 'name'=>'John Doe', “电子邮件”=>“约翰。Doe@example.com' ); 如果(设置($\u POST['send\u email'])和&$\u POST['send\u email']){//确保他们点击提交。 如果(设置($\u POST['fileName'])和&$\u POST['fileName']){//确保他们选择了一个文件。 如果(计数($_POST['fileName'])>5){ echo“您只能选择5个文件”; 退出(); } //设置电子邮件。 $mail=新的PHPMailer; $mail->setFrom('from@example.com‘你的名字’; $mail->addAddress($userData['email'],$userData['name']); $mail->Subject='这是发送附件的方式'; $mail->isHTML(true); $mail->Body=$userData['name'].,
'。 '这是您选择的文件!'; //这是附件部分。 foreach($_POST['fileName']作为$file){//在选定文件之间循环。 $mail->AddAttachment($path.$file,$file,'base64','application/pdf');//附加文件。 } 如果(!$mail->send()){//发送邮件。 回显“未发送消息”; 回显“邮件错误:”。$mail->ErrorInfo; }否则{ 回显“消息已发送”; } }否则{ echo“未选择任何文件”; } }

如果您在本地主机设置上进行测试,您可能需要进行一些故障排除,以获得要发送的电子邮件。我对谷歌搜索和解决这个问题没有经验。。如果在尝试了一些成功的方法后,您仍然无法解决问题,请发布另一个问题。

欢迎使用Stackoverflow!不幸的是,像这样的问题是因为它们主要解决了业务逻辑的许多需求的实现,并且也没有显示您的任何努力。如果您在系统的实现方面有问题,请尝试将您的问题分成几个部分。