2010-10-23 3 views
2

Я получаю файлы (изображения) закачанный с Ajax в моем PHP скрипт и получил его на работу с помощью этого:Использование PHP: // ввод и file_put_contents

$input = fopen("php://input", "r"); 
file_put_contents('image.jpg', $input); 

Очевидно, я дезинфицировать вход перед этой операцией ,

Одна вещь, которую я хотел, чтобы проверить, был размер файла перед созданием нового файла следующим образом:

$input = fopen("php://input", "r"); 
$temp = tmpfile(); 
$realsize = stream_copy_to_stream($input, $temp); 
if ($realsize === $_SERVER["CONTENT_LENGTH"]) { 
    file_put_contents('image.jpg', $temp); 
} 

И это не работает. Файл создается, но он имеет размер 0 байт, поэтому содержимое не помещается в файл. Я не очень хорошо знаком с использованием потоков, но я не понимаю, почему это не должно работать, поэтому я обращаюсь к вам за помощью. Заранее спасибо!

+1

Как именно вы загрузите его в WebBrowser? Обычно вы хотите использовать кодировку формы 'multipart/form-data', а затем захватить загруженный файл' $ _FILES'. С помощью 'php: // input' вы указываете, что вы ожидаете, что файл будет закрыт для тела запроса ENTIRE. Это говорит о том, что вы используете запатентованный подход для загрузки файла в webbrowser. Может быть, пользовательский апплет? – BalusC

+0

Я читаю коллекцию 'files' элемента' 'и просто отправляю' файл' методом XHR 'send()'. Не используется '

', поскольку я не хочу использовать iframes. Это поддерживается только Firefox и Chrome (не уверен в Safari) на данный момент. – Rafael

+0

Включите отображение ошибок и отображение ошибок. – NikiC

ответ

4

Решение было обманчиво прост:

$input = fopen("php://input", "r"); 
file_put_contents($path, $input); 
+0

Этот метод считается безопасным? – astroanu

1

Вы используете файловые ресурсы, как если бы они были строками. Вместо того, чтобы вы могли снова использовать stream_copy_to_stream:

stream_copy_to_stream($temp, fopen('image.jpg', 'w')); 
+0

Спасибо за ваше предложение, но я просто дал это, и он не работает. – Rafael

+0

Ошибка: Предупреждение: file_get_contents() ожидает, что параметр 1 будет строкой, указанным ресурсом. – Rafael

+0

@ Rafael: Я отредактировал мой ответ;) – NikiC

Смежные вопросы