Не боюсь сказать, что я ламо...
Feb. 18th, 2016 05:32 pmДорогие друзья, стыдно признаться, но вот web-программирование, разметка html - это то, что прошло практически мимо меня. javascript и php до недавнего времени для меня был совершенно пустой звук. Да, некоторые теги благодаря данному блогу я знаю, конечно, но это не серьёзно.
Но вот ударила мне моча в голову, пришла "гениальная идея", и решил я таки приобщиться к прекрасному. Прикупил себе за копьё облачный сервант. И думаю, сейчас забубеню. И началось с того, что вроде всё стоит (apache2, php), но нифига не пашет php. Что и как завести - не разумем. Слава богу, камраден
goodic подсобил.
А задача столь простая, что даже стыдно. Т.з. такое:
1. Заглавная страница с одной кнопкой (или двумя) "Загрузить файл". Типа такой:

Можно конечно сделать красивые кнопки, но это не принципиально.
2. Пипка "загрузка файла" загружает файл, проверяет чтобы он соответствовал атрибутам (размеру, разрешению и т.п.), и после чего запускает некий bash-скрипт на сервере. Касательно скрипта не принципиально, хоть сишную программу. Можно пока просто с echo скрипт.
3. После выполнения скрипта (важно контролировать момент окончания работы скрипта), загружается просто страница с некоторой картинкой. Или отдаётся картинка на отдачу.
Задача чопорная, простая, тупая. Но для тех, кто нифига не волочёт - непосильная. Буду признателен за помощь. Желательно не "сделать за меня", а объяснить что же и как, может показать примерами. Сервак опытный, так что можно будет и натурно показать, сломать не жалко (поднимем новый, если что (снапшот сделаем).
З.Ы. У меня даже загрузку по двум мануалам не получилось сделать. Не грузит и всё тут... Может права, может лева...
1. http://phpclub.ru/detail/article/upload
2. http://www.php.su/phphttp/?uploads
Но вот ударила мне моча в голову, пришла "гениальная идея", и решил я таки приобщиться к прекрасному. Прикупил себе за копьё облачный сервант. И думаю, сейчас забубеню. И началось с того, что вроде всё стоит (apache2, php), но нифига не пашет php. Что и как завести - не разумем. Слава богу, камраден
А задача столь простая, что даже стыдно. Т.з. такое:
1. Заглавная страница с одной кнопкой (или двумя) "Загрузить файл". Типа такой:

Можно конечно сделать красивые кнопки, но это не принципиально.
2. Пипка "загрузка файла" загружает файл, проверяет чтобы он соответствовал атрибутам (размеру, разрешению и т.п.), и после чего запускает некий bash-скрипт на сервере. Касательно скрипта не принципиально, хоть сишную программу. Можно пока просто с echo скрипт.
3. После выполнения скрипта (важно контролировать момент окончания работы скрипта), загружается просто страница с некоторой картинкой. Или отдаётся картинка на отдачу.
Задача чопорная, простая, тупая. Но для тех, кто нифига не волочёт - непосильная. Буду признателен за помощь. Желательно не "сделать за меня", а объяснить что же и как, может показать примерами. Сервак опытный, так что можно будет и натурно показать, сломать не жалко (поднимем новый, если что (снапшот сделаем).
З.Ы. У меня даже загрузку по двум мануалам не получилось сделать. Не грузит и всё тут... Может права, может лева...
1. http://phpclub.ru/detail/article/upload
2. http://www.php.su/phphttp/?uploads
no subject
Date: 2016-02-18 02:57 pm (UTC)Есть две страницы - статическая с формой и cgi, обрабатывающий загруженный файл (exec.cgi)
Хвост статической страницы где-то потерял.
no subject
Date: 2016-02-18 03:01 pm (UTC)no subject
Date: 2016-02-18 03:15 pm (UTC)Да и апач тебе вряд ли нужен, в большинстве случаев NGINX хватает. Впиливаешь fast-CGI и все работает как надо.
Я, кстати, когда-то начал писать библиотечку (https://github.com/eddyem/c-cgi-lib), но до конца не добил. Там какой-то косяк был с загрузкой файлов (то ли большие не грузились, то ли не было мультивыбора — не помню уже, давно это было). Возможно, когда-нибудь добью. Просто у меня пока нет задач загрузить файл на сервер, обычно наоборот — получить файл с данными.
Кстати, кажись, жабкоскрипт современного веба уже вроде как умеет слать файлы через вебсокеты. Это вообще задачу упрощает.
no subject
Date: 2016-02-18 03:23 pm (UTC)no subject
Date: 2016-02-18 03:26 pm (UTC)no subject
Date: 2016-02-18 03:29 pm (UTC)no subject
Date: 2016-02-18 06:31 pm (UTC)ЕМНИП все что надо - правильно обработать хттп запрос типа POST.
Файл должен в параметрах идти, ну т.е. имя файла отдельно и отдельно содержимое скорее всего заенкоженное в MIME, не помню уже.
no subject
Date: 2016-02-18 06:41 pm (UTC)Пхп сам миме разбирает, это гуд.
Только обрати внимание что в примере используется $_FILES['userfile'] потому что в форме указанно имя "userfile" для поля ввода: <input name="userfile" type="file">
Если name в инпуте будет другое - поправь имя в скрипте тоже.
no subject
Date: 2016-02-18 07:48 pm (UTC)no subject
Date: 2016-02-18 09:50 pm (UTC)Еще, правда, есть разные сорта говна в железе. Скажем, наивысший уровень — ардуйня. Уровень пониже — та же отмель, но на сях. И т.д., и т.п. ☺
no subject
Date: 2016-02-18 09:53 pm (UTC)Это как вместо линукса бубунту на компьютер поставить.
no subject
Date: 2016-02-19 01:55 am (UTC)no subject
Date: 2016-02-19 05:26 am (UTC)no subject
Date: 2016-02-19 06:52 am (UTC)no subject
Date: 2016-02-19 07:40 am (UTC)Лучше голую ось и поверх самому поставить (могу и я) что бы точно знать где, что и как настроено.
no subject
Date: 2016-02-19 07:42 am (UTC)no subject
Date: 2016-02-19 07:53 am (UTC)Есть проблема "линуксокапца", она реальна и не надо на нее глаза закрывать. Когда убьют линукс, чем пользоваться? Лопатой?
no subject
Date: 2016-02-19 09:24 am (UTC)Файл на сервере не появляется?
Что касается "контролировать момент окончания работы скрипта" - вроде бы тут недостаточно просто отдать страницу или картинку по окончанию. Если процесс загрузки был длинный, браузер может уже по таймауту перестать ждать ответа сервера.
Тут нужно не только на сервере (бэк-енд) кодить, но и в браузере (JS) - или регулярное "пингование" сервера, или создание callback-запроса (не помню, как это в вебдеве называется).
Впрочем, возможно, я гоню, и такое усложнение требуется только для отображения прогресса... Давно уже пытался осваивать эту тему, забросил.
Маленький лайфхак по отладке: можно сделать вывод значений переменных по ходу выполнения, аналогично printf - только тут echo.
no subject
Date: 2016-02-19 10:53 am (UTC)no subject
Date: 2016-02-19 10:54 am (UTC)no subject
Date: 2016-02-19 11:03 am (UTC)no subject
Date: 2016-02-19 11:06 am (UTC)no subject
Date: 2016-02-19 05:54 pm (UTC)no subject
Date: 2016-02-19 05:55 pm (UTC)no subject
Date: 2016-02-19 06:23 pm (UTC)no subject
Date: 2016-02-19 09:21 pm (UTC)no subject
Date: 2016-02-19 09:21 pm (UTC)no subject
Date: 2016-02-19 09:25 pm (UTC)У меня пусто.
> флаг "systemd" тоже имеется
А вот это — тревожный звоночек, да.
> даже арч на системд слетел
Я потому с рачика на генту и перешел.
> Хотя по большому счёту инит должен быть на скрипта
Согласен. Но подавляющее большинство юзеров — именно юзеры. Им насрать, как оно работает, лишь бы работало. Они не пишут софт, не поднимают уйму сервисов, а просто используют дефолтное окружение и довольствуются этим. Для них что мастдайка, что бубунта, что гей-ось, что хоть черт лысый — все едино! Лишь бы знакомые кнопочки были.
no subject
Date: 2016-02-20 05:26 pm (UTC)Разумеется что он годится только для случаев, когда тот самый "некий скрипт" работает не сильно долго (ориентировочно не дольше 30 сек).
no subject
Date: 2016-02-24 09:33 am (UTC)no subject
Date: 2016-02-24 09:35 am (UTC)За заметку большое спасибо!
no subject
Date: 2016-02-24 10:41 am (UTC)А через echo можно проверить, что вообще поступает на вход пхп-скрипта, правильно ли пришёл запрос.