The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"CGI file upload"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"CGI file upload"  +/
Сообщение от iii (??) on 28-Мрт-09, 15:55 
Пожалуйста, ткните носом, куда копать.

Имеется: написанный скрипт на awk, которому на вход подается определенный текстовый файл, а на выходе он видоизменяется. То есть запускается в shell


Хочется: автоматизировать это все средством CGI. Загружать файл по http и получить уже обработанный файл в экране браузера


Я написал CGI-скрипт (на bash), могу загрузить файл на сервер, но как его "словить"?
Если в action указать php-скрипт (printf "<form enctype=\"multipart/form-data\" method=POST action=/upload.php), то вроде бы все нормально, можно узнать имя файла из массива $_FILES:

команда echo $_FILES["uploadfile"]["name"]; возвращает имя.


Проблема в том, что во-первых, я не знаю ни php, ни perl, во вторых, в конечном итоге я должен передать файл awk-скрипту.

Поэтому в качестве action я указываю другой cgi-скрипт (на bash)
printf "<form enctype=\"multipart/form-data\" method=POST action=upload.sh

Я пытаюсь получить данный массив с именем файла, вызывая php - строку из своего upload.sh
php -c /etc/httpd -r 'print_r($_SERVER);'

Но массив пустой!

В тоже время массив $_SERVER прекрасно передается
php -c /etc/httpd -r 'print_r($_SERVER);'

Как лучше поступить?
Или php скриптом "вылавливать" файл и копировать его в определенный каталог, а потом из php-скрипта делать переадресацию на свой CGI-скрипт или же можно обойтись без промежуточого php-скрипта и сразу передавать управление CGI-приложению.

В последнем случае я не знаю, как переадать имя загруженного файла. Поэтому прошу помощи.
Заранее спасибо!


Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

  • CGI file upload, angra, 16:20 , 28-Мрт-09, (1)  
  • CGI file upload, TyLLIKAH, 16:32 , 28-Мрт-09, (2)  
    • CGI file upload, iii, 16:57 , 28-Мрт-09, (3)  
      • CGI file upload, angra, 17:17 , 28-Мрт-09, (5)  
        • CGI file upload, iii, 17:43 , 28-Мрт-09, (6)  
          • CGI file upload, kholan, 19:20 , 13-Апр-10, (9)  
    • CGI file upload, angra, 17:05 , 28-Мрт-09, (4)  
      • CGI file upload, TyLLIKAH, 20:26 , 28-Мрт-09, (7)  
        • CGI file upload, angra, 20:45 , 28-Мрт-09, (8)  

Сообщения по теме [Сортировка по времени | RSS]


1. "CGI file upload"  +/
Сообщение от angra (ok) on 28-Мрт-09, 16:20 
Начни с ответа на простой вопрос: зачем тебе вообще имя файла, если ты его хочешь просто обработать и выдать назад в браузер? Тело файла передается в stdin подобно атачам в письмах.
Потом перейди к более сложному вопросу: зачем для веб специфики использовать bash вместо php или perl? Какая религия запрещает вызвать awk скрипт из этих языков через те же обратные кавычки?
Без нормального ответа на эти вопросы помогать с явным извратом желанием не горю.
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "CGI file upload"  +/
Сообщение от TyLLIKAH on 28-Мрт-09, 16:32 
Заливаешь файл на сервер. В php скрипте (выполняемом сервером) вылавливешь из массива FILES имя временного файла, под которым он залился на сервер и под которым он там уже лежит, натравливаешь всё что нужно на этот файл, выполняя хоть awk с параметром, хоть что ещё.

Как запускать здесь. exec, system, обратные кавычки...
http://uk2.php.net/manual/ru/book.exec.php
В настройках php может быть запрещено выполнение команд


Про FILES здесь
http://uk2.php.net/manual/ru/reserved.variables.files.php
Заливка может быть запрещена

>> Я пытаюсь получить данный массив с именем файла, вызывая php - строку из своего upload.sh

Или я не понял что-то...

Заливает Apache потом передаёт своему модулю (mod_php) всю инфу. Ну или формирует переменные окружения для скрипта. Как, запустив не сервером, php скрипт, получить в него данные конкретного процесса Apache я, лично, не знаю.  

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "CGI file upload"  +/
Сообщение от iii (??) on 28-Мрт-09, 16:57 
Всем спасибо!

Сделал так:
файл заливаю, передаю php-скрипту, в котором вылавливаю имя файла (из $_FILES) и копирую в определенный каталог с определенным именем,
после делаю редирект на CGI скрипт (чистый awk) и получаю обработанный файл.


Извращенно, потому что я знаю только bash, sed и awk.
Cовсем не знаю php, perl. Так же не знаю, как по HTTP передать stdin и получить это в CGI.
Мне проще было ознакомиться с минимальными основами php и наваять простейший промежуточный php-скрипт.


<?php
##print_r($_SERVER);
copy($_FILES["uploadfile"]["tmp_name"],
"/var/tmp/upload.txt"))
header('Location:http://10.0.2.1/cgi-bin/newfile');
exit();
?>


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

5. "CGI file upload"  +/
Сообщение от angra (ok) on 28-Мрт-09, 17:17 
Знания awk вполне могло хватить, для принятия аплоада. Все данные при методе POST передаются через STDIN, в том числе имя, тип и содержимое загружаемого файла.

Другое дело, что взять php для этого куда проще чем прочитать о принципах работы CGI и POST, о чем я и говорил.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

6. "CGI file upload"  +/
Сообщение от iii (??) on 28-Мрт-09, 17:43 
>Знания awk вполне могло хватить, для принятия аплоада. Все данные при методе
>POST передаются через STDIN, в том числе имя, тип и содержимое
>загружаемого файла.
>
>Другое дело, что взять php для этого куда проще чем прочитать о
>принципах работы CGI и POST, о чем я и говорил.

Да, вы правы. Все оказалось так просто!
Даже php уже не нужно.
Спасибо!

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

9. "CGI file upload"  +/
Сообщение от kholan on 13-Апр-10, 19:20 
Я так понял, Вы решили проблему. У меня не получилось, помогите, плз.
Делаю так. Есть форма:
<form enctype="multipart/form-data" action="zz.sh" method="post">
<input name="userfile" type="file">
<input type="submit" value="Send File">
</form>

скрипт zz.sh:
#!/bin/sh
cat >zzz
...

Когда происходит submit формы, на сервере появляется нужный файл zzz, но на клиенте браузер висит, пока руками не остановишь. Т. е. дальше команды cat скрипт не уходит. Ощущение, что для cat не приходит признак конца ввода.
Подскажите, как это правильно реализовать.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

4. "CGI file upload"  +/
Сообщение от angra (ok) on 28-Мрт-09, 17:05 
>Заливает Apache потом передаёт своему модулю (mod_php) всю инфу.

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

Так он заливает(кстати куда) или передает "инфу" или формирует переменные окружения? Не упускайте подробностей.
>Как, запустив не сервером, php скрипт, получить
>в него данные конкретного процесса Apache я, лично, не знаю.

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


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

7. "CGI file upload"  +/
Сообщение от TyLLIKAH on 28-Мрт-09, 20:26 

>С этого момента поподробней, очень интересно про апач заливающий файлы :)

Ну чего вы так возбудились то ? Понятно, ведь, что я имел ввиду.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

8. "CGI file upload"  +/
Сообщение от angra (ok) on 28-Мрт-09, 20:45 
Откуда мне знать что вы имели в виду, я не телепат. Вы сказали, что заливает файл сам апач, это неверно и вводит в заблуждение новичков.
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру