Передача данных скрипту в виде файла

Полезные скрипты
Ответить
Аватара пользователя
mihas
Администратор
Сообщения: 1368
Зарегистрирован: 18 авг 2004, 16:58
Откуда: Москва
Контактная информация:

Передача данных скрипту в виде файла

Сообщение mihas »

Когда писал спектральный калькулятор захотелось передавать скрипту данные не только из формы но и в виде обычного текстового файла. Вот как это происходит:
Передадим обычной html-формой текстовый файл нашей странице spectralcalc.php:

Код: Выделить всё

<form name="input_file" method="post" enctype="multipart/form-data" action="spectralcalc.php">
<label>Текстовый файл с данными: <input type="file" name="file" id="file" /></label>
<input type="submit" value="Отправить">
</form>
Теперь получим файл на этой странице и обработаем его:

Код: Выделить всё

<?php
$file=$_FILES["file"]["tmp_name"];
$filetype=$_FILES["file"]["type"];
if($filetype=='text/plain'){
$contentfileimpl = implode("",file($file));
$contentslashes=addslashes($contentfileimpl);
$getfile2=str_ireplace("\r\n",";&;",$contentslashes);
$getfile1=str_ireplace("\r",";&;",$getfile2);
$getfile=str_ireplace("\n",";&;",$getfile1);
}
else {
	$getfile='';
}
?>
Как видно здесь присутствует условие: обрабатываться будет только текстовый файл text/plain. В нем мы экранируем кавычки командой addslashes и заменяем символы абзацев для разной кодировки (маковской, юниксоидной и виндовой) на редкое сочетание символов (в приведенном примере - ;&; ) с помощью функции str_ireplace. Если оставить абзацы как есть и не экранировать кавычки то ничего далее не получится - мы получим просто кривой html-код.
Теперь передадим содержимое php-переменной $getfile переменной getfile на javascript и выведем его в текстовое окно input формы spectr:

Код: Выделить всё

<script type="text/javascript">
getfile = '<?php echo $getfile; ?>';
if (getfile != ''){
getfile = str_ireplace(getfile,';&;','\n');
document.spectr.input.value = getfile; 
}
</script>
Можно заметить, что в PHP есть функция замены элементов строки str_ireplace а в javascript придется написать подобную функцию, чтобы заменить наши символы ;&; на абзац. Экранированные кавычки \" сами станут нормальными. Вот функция str_ireplace на javascript:

Код: Выделить всё

function str_ireplace(txt,cut_str,paste_str)
{
var f=0;
var ht='';
ht = ht + txt;
f=ht.indexOf(cut_str);
while (f!=-1){
f=ht.indexOf(cut_str);
if (f>0){
ht = ht.substr(0,f) + paste_str + ht.substr(f+cut_str.length);
}
}
return ht
}
Теперь в textarea с именем input мы видим наш текстовый файл так, как если бы смотрели его нотпадом. Сценарий на JavaScript получил содержимое текстового файла при помощи PHP, к сожалению совсем без помощи PHP передать файл в сценарий JavaScript только средствами html и JavaScript не получится.
Ответить

Вернуться в «PHP»