#php #forms #email
#php #формы #Адрес электронной почты
Вопрос:
Я пытаюсь загрузить файл с веб-сервера, используя функцию php. Эта функция является частью скрипта, который я написал, прикрепленного к форме. Моя цель — после того, как пользователь нажмет кнопку отправки, файл будет загружен через их браузер. Мой код для формы отправляет все заполненные данные на адрес электронной почты и отправляет клиенту электронное письмо с уведомлением о подтверждении, этот код работает и не имеет каких-либо известных ошибок. Я могу загрузить файл со своего сервера, используя следующий php-скрипт:
<?php
$name = 'Automated_Drones.pdf';
$fp = fopen($name, 'rb');
header("Content-Type: application/pdf");
header("Content-Length: " . filesize($name));
fpassthru($fp);
?>
Но когда я пытаюсь поместить этот скрипт в функцию и вызвать эту функцию с помощью моего скрипта электронной почты формы, похоже, он не работает. Я могу создавать произвольные сценарии и помещать приведенный выше код в функцию и вызывать ее, и она работает нормально. Но когда я пробую это с помощью моего скрипта электронной почты form, он вообще не работает. Я регистрирую ошибки во всех своих сценариях, и никаких ошибок не возникает в том, что у меня есть на данный момент. Электронные письма отправляются на адрес, указанный в форме, а второй адрес электронной почты получает его данные, поэтому я уверен, что это не проблема. Вот мой последний скрипт, который я пытался заставить работать:
<?php
global $_REQUEST, $wpdb;
$response = array('error'=>'');
$user_exp = test_input($_REQUEST['user_exp']);
$user_name = test_input(substr($_REQUEST['user_name'], 0, 20));
$user_surname = test_input($_REQUEST['user_surname']);
$user_title = test_input($_REQUEST['user_title']);
$user_industry = test_input($_REQUEST['user_industry']);
$user_email = test_input(substr($_REQUEST['user_email'], 0, 40));
$user_phone = test_input($_REQUEST['user_phone']);
//Download functions are run here, i comment out the functions im not using
//downloadFile();
//curl_get_file_contents('Automated_Drones.pdf');
downloadFile_new();
$contact_email = 'airobotics@XXXXXX.com.au';
$reply_msg = 'Thank you for downloading the airobotics latest white paper, if you did not receive the white paper upon completing your form please contact airobotics@xxxx.com.au for assistance';
$sub_us = 'Airobotics From Details from :$user_email';
$sub_user = 'Airobotics white paper brought to you by National Resources Review';
if (trim($contact_email)!='') {
$msg = "rn Name: $user_name rn Surname: $user_surname rn Title: $user_title rn Industry: $user_industry rn E-mail: $user_email rn Phone: $user_phone rn Drone Experience Type: $user_exp";
$head = "Content-Type: text/plain; charset="utf-8"n"
. "X-Mailer: PHP/" . phpversion() . "n"
. "Reply-To:airobotics@XXXXX.com.aun"
. "To: $user_emailn"
. "From: $contact_emailn";
$head_details = "Content-Type: text/plain; charset="utf-8"n"
. "X-Mailer: PHP/" . phpversion() . "n"
. "Reply-To:info@XXXXX.com.aun"
. "To: $contact_email"
. "From: no-reply@XXXXXX.com.aun";
mail($contact_email, $sub_us, $msg, $head_details);
if (!@mail($user_email, $sub_user, $reply_msg, $head)) {
$response['error'] = 'Error send message!';
}
} else
$response['error'] = 'Error send message!';
echo json_encode($response);
die();
//Test Form Data
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
//First Download Function tried
function downloadFile()
{
$name = 'Automated_Drones.pdf';
$fp = fopen($name, 'rb');
// send the right headers
header("Content-Type: application/pdf");
header("Content-Length: " . filesize($name));
fpassthru($fp);
}
//Second Download Function Tried
function curl_get_file_contents($URL) {
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_URL, $URL);
$contents = curl_exec($c);
$err = curl_getinfo($c,CURLINFO_HTTP_CODE);
curl_close($c);
if ($contents) return $contents;
else return FALSE;
}
//Thrid Download Function Tried
function downloadFile_new() {
$file_url = 'http://XXXXXX.com.au/Automated_Drones.pdf';
header('Content-Type: application/pdf');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename="" . basename($file_url) . """);
readfile($file_url); // do the double-download-dance (dirty but worky)
}
?>
Комментарии:
1. Вы действительно уверены, что не получили никаких сообщений об ошибках? Вы действительно просматривали файл журнала ошибок своих http-серверов?
2. О, с функциями загрузки файлов я это сделал, но при рассылке по электронной почте я не получил ошибок PHP
3. Что вы имеете в виду под этим? Вы нашли сообщения об ошибках в файле журнала ошибок? Итак, что это такое?
4. Извините, я пропустил формулировку последнего комментария. Я не нашел ошибок PHP при использовании этих функций. Я использовал их только по отдельности для этого скрипта электронной почты. Я убедился, что все они работают, создавая отдельные скрипты и тестируя их по отдельности. Итак, да, последней известной ошибкой, которую я получил, была синтаксическая ошибка, но это было только потому, что я пропустил скобку в последней функции
5. Может быть, я убиваю скрипт в неподходящее время
Ответ №1:
изменить:
else
$response['error'] = 'Error send message!';
echo json_encode($response);
die();
Для:
else{
$response['error'] = 'Error send message!';
echo json_encode($response);
die();
}
также попробуйте вызвать вашу downloadFile_new
функцию в конце вашего скрипта. Возможно, вы столкнулись с проблемой выходного буфера
Комментарии:
1. Спасибо даст этому шанс
2. С первым внесенным изменением кажется, что электронные письма отправляются, но сообщение с подтверждением не отображается. Я уверен, что это потому, что он будет отображаться только в случае ошибки в форме или при передаче по электронной почте. Сейчас я попробую вашу другую рекомендацию
3. Добавление функции в конце не помогло : (
4. вы пробовали вставлять a
var_dump()
в разные точки своего кода, чтобы увидеть, где происходит сбой. кроме того, насколько велик файл, для которого вы пытаетесь вызватьreadfile
функцию? Я знаю, что для файлов большего размера эта функция не будет работать.5. Нет, я еще не пробовал это, но я попробую использовать
var_dump()
, чтобы посмотреть, работает ли это. Я пробовал использоватьecho
, но это мне ничего не показывает
Ответ №2:
Спасибо за помощь, ребята. К сожалению, после долгих исследований я не нашел простого способа добиться этого, поэтому в качестве более простой альтернативы я решил добавить вторую кнопку, которая отображается при успешной отправке формы