2015-09-14 1 views
0

Я создал форму, используя dompdf, и когда я загрузил ее на обычный сервер, к которому принадлежит веб-сайт, он отлично работал. Однако, когда я переместил его на безопасный сервер (ssl), он не работал и не отправил форму. Сервер работает под управлением Linux. Веб-сервер - это Nginx с FastCGI. Любые идеи о том, что может происходить? Я просто получаю сообщение об ошибке из формы, говоря, что не все обязательные поля заполнены, но есть только два, и я их заполнил.dompdf форма не работает должным образом в защищенном сервере (ssl)

2015/09/10 22:07:35 [error] 14522#0: *1509 FastCGI sent in stderr: "PHP 
message: PHP Warning: strip_tags() expects parameter 1 to be string, 
array given in 
/var/www/nuweights.net/html/patient_registration_form/form.php on line 13 
PHP message: PHP Warning: strip_tags() expects parameter 1 to be 
string, array given in 
/var/www/nuweights.net/html/patient_registration_form/form.php on line 13 
PHP message: PHP Notice: Undefined property: stdClass::$prim_phone in 
/var/www/nuweights.net/html/patient_registration_form/pdf.php on line 
180" while reading response header from upstream, client: 72.83.230.123, 
server: nuweights.net, request: "POST 
/patient_registration_form/form.php HTTP/1.1", upstream: 
"fastcgi://unix:/var/run/php5-fpm.sock:", host: "ssl.nuweights.net", 
referrer: "https://ssl.nuweights.net/patient_registration_form/form.php" 

Это код для файла php. Если мне нужна дополнительная проверка, как ее добавить? что будет для этого кодом?

<?php 
if (!empty($_POST)) { 

// Used for later to determine result 
$success = $error = false; 

// Object syntax looks better and is easier to use than arrays to me 
$post = new stdClass; 

// Usually there would be much more validation and filtering, but this 
// will work for now. 
foreach ($_POST as $key => $val) 
$post->$key = trim(strip_tags($_POST[$key])); 

// Check for blank fields 
if (empty($post->first_name) OR empty($post->last_name)) 
    $error = true; 
else { 

    // Get this directory, to include other files from 
    $dir = dirname(__FILE__); 

    // Get the contents of the pdf into a variable for later 
    ob_start(); 
    require_once($dir.'/pdf.php'); 
    $pdf_html = ob_get_contents(); 
    ob_end_clean(); 

    // Load the dompdf files 
    require_once($dir.'/dompdf/dompdf_config.inc.php'); 
    $dompdf = new DOMPDF(); // Create new instance of dompdf 
    $dompdf->load_html($pdf_html); // Load the html 
    $dompdf->render(); // Parse the html, convert to PDF 
    $pdf_content = $dompdf->output(); // Put contents of pdf into variable for later 

    // Get the contents of the HTML email into a variable for later 
    ob_start(); 
    require_once($dir.'/html.php'); 
    $html_message = ob_get_contents(); 
    ob_end_clean(); 

    // Load the SwiftMailer files 
    require_once($dir.'/swift/swift_required.php'); 

    $mailer = new Swift_Mailer(new Swift_MailTransport()); // Create new instance of SwiftMailer 

    $message = Swift_Message::newInstance() 
        ->setSubject('Patient Registration Form') // Message subject 
        ->setTo(array('[email protected]' => 'Sam')) // Array of people to send to 
        ->setFrom(array('[email protected]' => 'PRF')) // From: 
        ->setBody($html_message, 'text/html') // Attach that HTML message from earlier 
        ->attach(Swift_Attachment::newInstance($pdf_content, 'reg_form.pdf', 'application/pdf')); // Attach the generated PDF from earlier 

    // Send the email, and show user message 
    if ($mailer->send($message)) 
     $success = true; 
    else 
     $error = true; 

    } 

} 
?> 
+0

Проблема, похоже, не связана с dompdf. – BrianS

ответ

0

Ваш безопасный сервер отдельно от вашего незащищенного, правильный? Похоже, возможно, display_errors (в конфигурации PHP) установлен на «включено» для защищенного сервера. Из-за этого вы видите сообщения из PHP, связанные с уведомлениями и ошибками кода. Если вы не работаете на dev-сервере, вы почти всегда должны отключать эту настройку, чтобы избежать раскрытия информации.

Прежде чем вы беспокоитесь о том, что делает dompdf, вы должны обратиться к проблемам конфигурации и добавить в свой код обработку и/или проверку исключений.

Некоторые мысли о том, что вы опубликовали.

Вы обычно проверяете без учета типа данных в цикле foreach. Вы должны, по крайней мере, проверить, является ли распознаваем strip_slashes() переменная, например .:

foreach ($_POST as $key => $val) { 
    if (is_array($_POST[$key])) { 
    // assuming this is an array of values 
    $post->$key = array_map('trim', array_map('strip_slashes', $_POST[$key])); 
    } 
    else 
    { 
    $post->$key = trim(strip_tags($_POST[$key])); 
    } 
} 

2 - Вы пытаетесь проверить свойства, которые могут или не могут существовать на вашем объекте. Так как вы не делаете какие-либо определенные задания, нужно проверить, что эти свойства даже существуют, прежде чем утвердить против них:

if (!property_exists($post, 'first_name') || !property_exists($post, 'last_name') || empty($post->first_name) || empty($post->last_name)) 
{ 
    $error = true; 
} 

3 - Почему вы назначая свойства родового объекта в первую очередь? Если вы хотите использовать объект, вы должны, вероятно, пойти дальше и определить класс, чтобы вы могли заполнять и проверять значения во время создания экземпляра. Если вы не хотите делать это, назначьте их переменным, чтобы вы знали, действительно знаете, какие у вас данные. Если вы хотите укороченный его вы могли бы сделать что-то вроде этого (или написать свой собственный):

$first_name = filter_var($_POST['first_name'], FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); 

Чтобы упростить это для большого числа вы могли даже создать массив ожидаемых параметров, так и разобрать этот массив чтобы установить свои значения:

$post = array(); 
foreach (array('first_name','last_name') as $key) 
{ 
    $post[$key] = filter_var($_POST[$key], FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); 
} 

4 - Используйте фигурные скобки для ясности ... всегда

Вы можете принять это к https://codereview.stackexchange.com/, чтобы получить более полную критику.

+0

Как примечание: когда я пытаюсь отлаживать проблемы с dompdf, первое, что я обычно делаю, это убедиться, что HTML генерируется правильно, выведя dompdf из уравнения. – BrianS

+0

Спасибо! как я могу добавить еще проверку? Я отредактировал вопрос и добавил код, который у меня есть в php-файле. –

+0

@SamanthaIsabel обновил мой ответ, чтобы отразить обновление вашего вопроса. – BrianS