2012-02-01 3 views
13

Я использую текстовый файл в сценарии PhP. Есть ли способ обработать файл в сценарии PhP, не сохраняя его локально? Всюду я вижу просто загрузку файла и сохранение его. Мне просто нужно вытащить некоторые имена из файла и сделать с ним. У меня есть все остальное, если я использую локальную копию файла, поэтому сохраняю его, а затем удаляет его. Мне просто интересно, есть ли способ пропустить сохранение копии и просто получить эту информацию напрямую.php FILE POST upload без сохранения

Загрузите файл здесь.

<html> 
<body> 
    <form action="test.php" method="post" enctype="multipart/form-data"> 
     <label for="file">Filename:</label><input type="file" name="file" id="file" /> <br /> 
     <input type="submit" name="submit" value="Submit" /> 
    </form> 
</body> 
</html> 

и в сценарии работы с копией файла, сохраненного локально, я просто использую

$file = fopen($_FILES['file']['name'], "r"); 

ответ

14

Если его текстовый файл (предполагается, что размер не то, что огромный), как правило, вы можете прочитать его

$contents= file_get_contents($_FILES['file']['tmp_name']); 

Если вы не уверены, какой тип загрузки это, проверка метод reuest

if(strtolower($_SERVER['REQUEST_METHOD'])=='post') 
    $contents= file_get_contents($_FILES['file']['tmp_name']); 
elseif(strtolower($_SERVER['REQUEST_METHOD'])=='put') 
    $contents= file_get_contents("php://input"); 
else 
    $contents=""; 
+3

Условие выглядит одинаково, я полагаю, 2-й раз, когда вы имели в виду strtolower ($ _ SERVER ['REQUEST_METHOD']) == 'put' – netadictos

0

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

0

Вы можете просто использовать $_FILES["file"]["tmp_name"], который будет загружен временным файлом. Как только ваш скрипт будет запущен, PHP должен даже очистить после себя и удалить временный файл.

3

Когда форма отправлена, проверьте имущество $_FILES['input_name']['tmp_name']. Это путь к файлу, сохраненному на временном пути системы /tmp. Вы можете продолжить чтение имени, используя, скажем, file_get_contents(), а затем просто забудьте файл. Система позаботится о ее удалении.


Просто, чтобы выделиться из других ответов, вы теоретически могли бы прочитать файл без даже загрузив его с помощью JavaScript, см http://www.html5rocks.com/en/tutorials/file/dndfiles/. Затем отправьте только те данные, которые вам нужны в рамках запроса AJAX.

1

При загрузке файла перед его сохранением локально он сохраняется во временном файле. Расположение которых можно получить по:

$_FILES['uploadedfile']['tmp_name'] 

Вы можете не сохранить файл и fopen() временный файл, до тех пор, как вы делаете это в пределах того же сценария, что recieves POST.

3

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

$file = file_get_contents($_FILES["ufiley"]["tmp_name"]); 

unlink($_FILES["ufiley"]["tmp_name"]); 

//contents would be stored in $file 
+4

Не нужно 'unlink()' временного файла AFAIK, поскольку PHP автоматически делает это, когда скрипт заканчивается. –

+0

@George Да. Это для ясности. – Mob