MiksIr, фреймворк phpdaemon, судя по разделу "Installation" из документации, ставится только на NIX'ы. Код по ссылке на php.net очень похож на мой, так же два основных цикла и тройка сокетных команд create/select/accept, по сути вся разница в "оформлении".
PanoptikExec похож на выход из проблемы, но не очень нравится из-за необходимости передачи дескрипторов для записи в сокет и для удаления из массива клиентов. Нужно тестить, других альтернатив, похоже, все равно пока нет.
Печально, но форк в данном случае являлся бы идеальным решением: родительский процесс крутит бесконечный цикл прослушки порта, а дочерние обращаются к удаленному серверу и ведут запись в сокет по известным дескрипторам, после чего убивают себя. На все меньше десятка строчек кода.
Есть рабочий скрипт, где создается сокет с помощью socket_create() для TCP, а потом осуществляет прослушку порта через бесконечный цикл с socket_select() и socket_accept(). ВНЕЗАПНО появилась новая хотелка: после прочтения данных необходимо обратиться к PHP-файлу на другом сервере с передачей параметров через POST. Не обладая особыми знаниями, решил сделать эту хотелку с помощью CURL и сделал примерно так:
Оно работает, но... на реальном сервере к сокету будет сотня-другая обращений в минуту, а удаленный сервер не отличается особой оперативностью и ответа (его надо будет записать в сокет) придется ждать 0.5-1 сек, что в результате даст очередь. Очередь меня не устраивает и от нее нужно избавиться.
Можно ли по-простому модифицировать имеющийся код или лучше покурить мануалы (какие?) на тему каких-то (каких?) других подходов в плане работы с сокетом и/или удаленным сервером?
P. S. PHP для меня как небольшое хобби, поэтому уходить дальше решения данного вопроса не хотелось бы.
Бился над проблемой несколько часов, но стоило создать тему и через 30 секунд сам же и нашел ответ. Оказалось, что достаточно прописать необязательный параметр lob_type:
Ivalar в том, что хранить саму картинку в базе считается некоторым идиотизмом. Почему не храните ссылку на изображения?
Есть сайт, на нем страница для заполнения резюме с фотографией. Просмотр резюме производят кадровики через форму, написанную в Oracle Form Builder. Исходя из этих требований фотографию проще хранить в БД, плюс нет необходимости отвоевывать квоты на выделения места на жестких дисках.
Пытаюсь сделать сохранение изображений в БД ORCALE 10g в поле типа BLOB, изображения сохраняются, но в искаженном виде. Пробовал на простеньком bmp, gif и png. В bmp черный квадрат с красным крестом, после заливки происходит смещение красного цвета к более темному. В gif содержится мусор, а png не просматривается вовсе. При сравнении любого из этих залитых файлов с оригиналами через comp в FAR видна замена значений по некоторым OFSSET, что нарушает формат файла. Код сохранения в слегка упрощенном виде:
Пробовал менять BLOB на CLOB - некоторое улучшение было (появился мусор в png и bmp сохранился без искажений цвета), но это явно не тот вариант, который нужен.
Спасибо за помощь. Этого должно быть достаточно для решения моей задачи.
UPDATE:
Поспешил с выводами. Почитал, попробовал на практике и смог сократить заголовки лишь до такого вида:
HTTP/1.1 200 OK
Date: Tue, 06 Nov 2012 11:58:05 GMT
Server: Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8k PHP/5.3.3
Content-Length: 62
Content-Type:
Эти заголовки не удаляются через header_remove() и их значения не изменяются через header(). Точнее, через header() получилось занулить лишь один заголовок Content-Type. Что странно, в ходе ползания по интернетам, наткнулся на рекомендацию обнуления заголовка Server в целях безопасности с помощью конструкции header('Server: '), которая, как уже сказал, у меня ни к чему не привела.
обратись к разработчику неведомого "моста"
тут экстрасенсов нет чтобы догадатся шо сие такое
Как минимум один экстрасенс тут есть - я. Мои экстрасенсорные способности говорят, что текст выше ты не читал, а решил сделать +1 пост.
В решении данного вопроса "мост" не играет никакой роли, можешь забыть про него. С тем же успехом я могу запустить браузер, вбить адрес php-файла с добавлением GET-параметра и получить ответ (страницу) от apache-сервера. Вопрос лишь в заголовках этой страницы. Какой-нибудь "X-Powered-By" мне нафиг не вперся, но два десятка байт съедает.
Есть php-файл, который принимает по http команды от "моста", обрабатывает их и выплевывает обратно html-страницу с закодированным ответом примерно такого вида:
При этом у страницы имеется куча заголовков, подставляемых автоматически:
HTTP/1.1 200 OK
Date: Thu, 06 Nov 2012 10:41:57GMT
Server: Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8k PHP/5.3.3
X-Powered-By: PHP/5.3.3
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Last-Modified: Thu, 06 Nov 2012 10:41:57GMT
Set-Cookie: PHPSESSID=AN3S4HAHVQSETGMUAV8OAJDNKOQWABSH; path=/
Content-Length: 94
Content-Type: text/html; charset=windows-1251
Таким образом получается, что заголовки страницы весят больше, чем сам ответ на команду. В условиях жесткой экономии траффика нужно уйти от этой лишней информации. Как и какие из этих заголовков можно безболезненно поотключать?
Массив в PHP имеет такой вид:
Array ( [data] => Array ( [mas[0] => Array ( [param1] => xxx [param2] => yyy [param] => zzz) ) )
В примере выше 1 запись, но можно ли переслать несколько записей разом, а не по одной, кроме как каждый раз осуществяя запуск хранимой процедуры, производящей сохранение этих записей в БД? Как в хранимой процедуре реализовать работу с полученным массивом?