Ошибка при загрузке файла с использованием PHP - PullRequest
2 голосов
/ 24 января 2012

Я прошу пользователя загрузить файл через следующую форму, отправив POST-запрос на другую страницу. Upload.php

<form name="input" action="upload.php" method="post" enctype="multipart/form-data">
    Username: <input type="text" name="username" /><br/>
    <input type="file" name="file" /> <br/>
    <input type="submit" value="Submit" />
</form>

На Upload.php я использую данные, заполненные в предыдущей форме.сделать запрос POST, используя функцию Curl, для которой я написал следующий код:

$data = array(
        "username" => $username,
        "password" => $password,
        "title" => $title,
        "srcfile" => "@".$_FILES['file']['tmp_name']);

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_URL, $api);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response=curl_exec($ch);

echo $response;

Таким образом, я могу успешно загрузить файл, но загруженный файл имеет имя без расширения, которое задаетсяthis

$ _ FILES ['file'] ['tmp_name']

и, следовательно, я не могу использовать файл на сервере.

Как мне использовать файл, полученный из POST-запроса, чтобы сделать еще один POST-запрос?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 31 января 2012

Проблема в вышеприведенном случае заключается в том, что, хотя мы можем получить файл, используя $ _FILES ['file'] ['tmp_name'], тем не менее, расширение файла не совпадает с расширением исходного файла и даже следующего кода не работает, который должен работать как показано в этой ошибке https://bugs.php.net/bug.php?id=48962 в PHP 5.0

"srcfile" => "@".$_FILES['file']['tmp_name'].";filename=".$_FILES['file']['name'].";type=".$_FILES['file']['type']

Я, наконец, использовал следующее решение для решения вышеуказанной проблемы:

ШАГ 1: Сохраните файл, отправленный с помощью запроса POST формы, в папку временно на сервере или на вашем компьютере.

ШАГ 2: Теперь используйте путь, где файл был временно сохранен, чтобы сделать POST-запрос с использованием CURL, для которого используется код, такой же, как указано выше, с изменениями в расположении файла.

"srcfile" => "@".temp_file_path
1 голос
/ 24 января 2012

Вы должны прочитать файл, закодировать его и назначить закодированное значение элементу XML.Например, вы можете использовать что-то вроде:

$xml->file = base64_encode( file_get_contents( $_FILE['file'][ 'tmp_name' ] ) );

Конечно, в реальном коде вы должны добавить проверку ошибок и т. Д.

1 голос
/ 24 января 2012

$_FILE['file'] - это массив, что означает complex types для свойств SimpleXMLElement.

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