Попытка сделать POST-запрос с одной страницы моего сайта на другую с помощью PHP и Curl - PullRequest
0 голосов
/ 28 октября 2011

Привет всем Я видел несколько вопросов по этой теме здесь, но ни один из них не решил мою проблему. У меня есть скрипт на моем сайте, который я хочу использовать для создания нескольких различных типов электронных писем для моих пользователей. Мне нужен был способ создания файлов шаблонов для разных электронных писем, которые принимают переменные $ _POST для заполнения соответствующей информации, и просто сделать запрос на публикацию этих шаблонов и получить ответ, чтобы поместить его в тело письма. Я пытаюсь написать функцию, которая бы принимала расположение файла шаблона (относительный или абсолютный, но я бы предпочел относительный), и массив параметров, которые я хотел бы отправить в шаблон по почте. Пока что мне не повезло. Вот мой код:

private function post_request($url, $data) {
    $output = array();
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $result = curl_exec($ch);
    curl_close($ch);
    if ($result) {
        $output['status'] = "ok";
        $output['content'] = $result;
    } else {
        $output['status'] = "failure";
        $output['error'] = curl_error($ch);
    }
    curl_close($ch);
    return $output;
}

Я получаю сообщение об ошибке «не удалось подключиться к хосту» из curl, но после вывода моего URL в журнал ошибок я смог убедиться, что копирование и вставка URL-адреса в firefox приводит к правильному отображению страницы.

Есть идеи? Я не женат на идее использования curl, поэтому, если есть лучший вариант, я был бы счастлив использовать его вместо этого. Спасибо всем за помощь!

Ответы [ 3 ]

0 голосов
/ 28 октября 2011

Другой вариант: вы говорите, что оба файла находятся на одном сервере.В этом случае вы можете просто потребовать () конструктор шаблонов.

private function post_request($url, $data) {
    $output = array();

    @require_once('./path/to/template_builder.php');

    if ($result) {
        $output['status'] = "ok";
        $output['content'] = $result;
    } else {
        $output['status'] = "failure";
        $output['error'] = 'Could not open remote file';
    }
    return $output;
}

Затем в template_builder.php:

<?php

unset( $result );

if ( is_array( $data ) ){
    // Parse $data ...
    $result = $email_template;
}
0 голосов
/ 29 октября 2011

Как оказалось, проблема закончилась ошибкой конфигурации сервера.У сервера истекло время ожидания при попытке связаться с файлом, поскольку он подключен не к тому DNS-серверу.Исправление, которое решило мою проблему!

0 голосов
/ 28 октября 2011

Вы должны иметь возможность использовать file_get_contents () для этого, если ваш хост не помешал ему получить доступ к удаленным расположениям (а сценарий $ url не ищет исключительно данные POST).

private function post_request($url, $data) {
    $output = array();

    $url_with_data = '';
    foreach ( $data as $k=>$v ){ // Loop through data and create request string
        $url_with_data .= '&' . $k . '=' . $v;
    }

    // Remove first ampersand and encode the data
    $url_with_data = urlencode( substr( $url_with_data, 1 ) );

    // Request file
    // Format will be http://url.com?var1=data&var2=data&var3=data
    $result = file_get_contents( $url . '?' . $url_with_data );

    if ($result) {
        $output['status'] = "ok";
        $output['content'] = $result;
    } else {
        $output['status'] = "failure";
        $output['error'] = 'Could not open remote file';
    }
    return $output;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...