размещение многочастной формы из php онлайн (все нормально на localhost) - PullRequest
2 голосов
/ 28 марта 2012

это мой код, который на localhost выводит правильную текстовую версию pdf, но когда я помещаю его в Интернет, он не отправляет файл правильно или что-то в этом роде и не выдает конвертированный текст.пожалуйста, нужна помощь

<?php


//Target url
$url = "http://service.coolutils.com/PDF-Converter.php";


//Boundary definition
$boundary = "---------------------".substr(md5(rand(0,32000)), 0, 10);

//Post data
$data = "";

//Fields
$data .= "--$boundary\n";
$data .= "Content-Disposition: form-data; name=\"ConvertTo\"\n\ntxt\n";
$data .= "--$boundary\n";
$data .= "Content-Disposition: form-data; name=\"Converter\"\n\npc\n";
$data .= "--$boundary\n";

//Files
$fileContents = file_get_contents('test.pdf');
$data .= "Content-Disposition: form-data; name=\"filename\"; filename=\"test.pdf\"\n";
$data .= "Content-Type: application/pdf\n";
$data .= "Content-Transfer-Encoding: binary\n\n";
$data .= $fileContents."\n";
$data .= "--$boundary\n";

//Header
//$optional_headers = header('Content-Type: multipart/form-data; boundary='.$boundary);



//Construct params
$params = array('http' => array(
 'method' => 'POST',
 'header' => 'Content-Type: multipart/form-data; boundary='.$boundary,
 'content' => $data
));

//Create context
$ctx = stream_context_create($params);

//Post data to url
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp) {
 echo "Error posting to $url: " . $php_errormsg;
 exit(1);
}

//Read response
$response = @stream_get_contents($fp);
if ($response === false) {
 throw new Exception("Problem reading data from $url, $php_errormsg");
 exit(1);
}

//Display response (with a little bit of formatting)
$response = strip_tags($response);
$response = preg_replace('/\s+\n/', "\n", $response);
$response = preg_replace('/\n\s+/', "\n", $response);
$response = preg_replace("'[ ]+'", ' ', $response);
echo $response;

echo "Done";
?>

ОБНОВЛЕНИЕ 14/04 - я упростил код, чтобы сделать его более понятным.Я использую WAMP (win32) на локальном хосте, и он хорошо работает.проблема в том, что он не работает на сервере Linux в Интернете.

файл "test.pdf" находится в той же папке скрипта, поэтому любой, кто скажет, что проблема в этом, просто не скажет: D

1 Ответ

1 голос
/ 13 апреля 2012

Я думаю, вы должны проверить некоторые вещи:

  1. Вы называете внешний сайт более file_get_contents.Возможно, ваш брандмауэр заблокировал запрос.
  2. Я проверил ваши скрипты и удалил некоторые ошибки.Распечатайте ответ, и вы получите некоторую информацию, почему он не работает.

В моем случае я получил «Ваш файл в формате Doc. Пожалуйста, используйте Total Doc Converter для конвертации в другие форматы».

<?php
ini_set('max_execution_time', 300);

$tmp = $_FILES['filename']['tmp_name']; 
$emri = $_FILES['filename']['name'];
$madhesia= $_FILES['filename']['size'];
$file_src = dirname(__FILE__)."/uploads/";

if (move_uploaded_file($tmp, $file_src.$emri)) {
    echo 'Skedari u ngarkua me sukses.';
} else {
    echo 'Ndodhi nje problem ne ngarkim!';
}

if(isset($_POST['submit'])) {
    $destination = "http://service.coolutils.com/PDF-Converter.php";

    $eol = "\r\n";
    $data = '';

    $mime_boundary=md5(time());

    $data .= '--' . $mime_boundary . $eol;
    $data .= 'Content-Disposition: form-data; name="ConvertTo"' . $eol . $eol;
    $data .= "txt" . $eol;
    $data .= '--' . $mime_boundary . $eol;
    $data .= 'Content-Disposition: form-data; name="Converter"' . $eol . $eol;
    $data .= "pc" . $eol;
    $data .= '--' . $mime_boundary . $eol;
    $data .= 'Content-Disposition: form-data; name="filename"; filename='.$emri . $eol;
    $data .= 'Content-Type: application/pdf' . $eol;
    $data .= 'Content-Transfer-Encoding: binary' . $eol . $eol;
    $data .= file_get_contents($file_src.$emri) . $eol;
    $data .= "--" . $mime_boundary . "--" . $eol . $eol; 

    $para = array('http' => array(
        'method' => 'POST',
        'header' => 'Content-Type: multipart/form-data; boundary=' . $mime_boundary . $eol,
        'length' => 'Content-Length: '.$madhesia,
        'content' => $data
    ));

    $ctx = stream_context_create($para);

    $response = file_get_contents($destination, FILE_USE_INCLUDE_PATH, $ctx);

    /**
     * Debug
     */         
    var_dump($response);
}
print_r($response);
?>
<form name="MainForm" action="#" enctype="multipart/form-data" method="post">
    <input type="Hidden" name="ConvertTo" value="txt" />
    <input id='albi' type="file" size="50" name="filename" />
    <input name="submit" type="submit" />
</form>

Надеюсь, это поможет, и вы сможете найти проблему.Но когда $ response пуст, вы должны проверить ваше соединение с другим сервером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...