PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 10
Ivalar Отправлено: 17 Ноября, 2014 - 15:52:29 • Тема: socket_create/select/accept + CURL = очередь • Форум: Работа с сетью

Ответов: 5
Просмотров: 1563
MiksIr, фреймворк phpdaemon, судя по разделу "Installation" из документации, ставится только на NIX'ы. Код по ссылке на php.net очень похож на мой, так же два основных цикла и тройка сокетных команд create/select/accept, по сути вся разница в "оформлении".

PanoptikExec похож на выход из проблемы, но не очень нравится из-за необходимости передачи дескрипторов для записи в сокет и для удаления из массива клиентов. Нужно тестить, других альтернатив, похоже, все равно пока нет.

Печально, но форк в данном случае являлся бы идеальным решением: родительский процесс крутит бесконечный цикл прослушки порта, а дочерние обращаются к удаленному серверу и ведут запись в сокет по известным дескрипторам, после чего убивают себя. На все меньше десятка строчек кода.
Ivalar Отправлено: 17 Ноября, 2014 - 14:17:58 • Тема: socket_create/select/accept + CURL = очередь • Форум: Работа с сетью

Ответов: 5
Просмотров: 1563
Сразу не сказал, но все это дело должно крутиться под Windows, поэтому pcntl_fork не подходит.
Ivalar Отправлено: 17 Ноября, 2014 - 12:55:51 • Тема: socket_create/select/accept + CURL = очередь • Форум: Работа с сетью

Ответов: 5
Просмотров: 1563
Есть рабочий скрипт, где создается сокет с помощью socket_create() для TCP, а потом осуществляет прослушку порта через бесконечный цикл с socket_select() и socket_accept(). ВНЕЗАПНО появилась новая хотелка: после прочтения данных необходимо обратиться к PHP-файлу на другом сервере с передачей параметров через POST. Не обладая особыми знаниями, решил сделать эту хотелку с помощью CURL и сделал примерно так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. if ($ch = curl_init()) {
  3.   curl_setopt($ch, CURLOPT_URL, 'http://localhost/test/test.php');
  4.   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  5.   curl_setopt($ch, CURLOPT_POST, 1);
  6.   curl_setopt($ch, CURLOPT_POSTFIELDS, "param=$param");
  7.   $answer = curl_exec($ch);
  8.   if ($answer === false) {
  9.     // Обработка ошибки
  10.   } else {
  11.     // Запись в сокет
  12.   }
  13.   curl_close($ch);
  14. }
  15.  

Оно работает, но... на реальном сервере к сокету будет сотня-другая обращений в минуту, а удаленный сервер не отличается особой оперативностью и ответа (его надо будет записать в сокет) придется ждать 0.5-1 сек, что в результате даст очередь. Очередь меня не устраивает и от нее нужно избавиться.

Можно ли по-простому модифицировать имеющийся код или лучше покурить мануалы (какие?) на тему каких-то (каких?) других подходов в плане работы с сокетом и/или удаленным сервером?

P. S. PHP для меня как небольшое хобби, поэтому уходить дальше решения данного вопроса не хотелось бы.
Ivalar Отправлено: 21 Декабря, 2012 - 09:21:19 • Тема: Запись изображения в БД ORACLE • Форум: Работа с СУБД

Ответов: 3
Просмотров: 2151
Бился над проблемой несколько часов, но стоило создать тему и через 30 секунд сам же и нашел ответ. Оказалось, что достаточно прописать необязательный параметр lob_type:

$photo->writetemporary($filedata, OCI_TEMP_BLOB);
(Добавление)
avtor.fox пишет:
Ivalar в том, что хранить саму картинку в базе считается некоторым идиотизмом. Почему не храните ссылку на изображения?

Есть сайт, на нем страница для заполнения резюме с фотографией. Просмотр резюме производят кадровики через форму, написанную в Oracle Form Builder. Исходя из этих требований фотографию проще хранить в БД, плюс нет необходимости отвоевывать квоты на выделения места на жестких дисках.
Ivalar Отправлено: 21 Декабря, 2012 - 09:12:15 • Тема: Запись изображения в БД ORACLE • Форум: Работа с СУБД

Ответов: 3
Просмотров: 2151
Пытаюсь сделать сохранение изображений в БД ORCALE 10g в поле типа BLOB, изображения сохраняются, но в искаженном виде. Пробовал на простеньком bmp, gif и png. В bmp черный квадрат с красным крестом, после заливки происходит смещение красного цвета к более темному. В gif содержится мусор, а png не просматривается вовсе. При сравнении любого из этих залитых файлов с оригиналами через comp в FAR видна замена значений по некоторым OFSSET, что нарушает формат файла. Код сохранения в слегка упрощенном виде:

CODE (htmlphp):
скопировать код в буфер обмена
  1.   PROCEDURE upload_photo (
  2.     p_id IN number,
  3.     p_photo IN blob
  4.   ) IS
  5.   BEGIN
  6.     INSERT INTO soisk_photo(
  7.       id,
  8.       photo
  9.     ) VALUES (
  10.       p_id,
  11.       p_photo
  12.     );
  13.   END;


CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2.  if (!$conn = oci_connect('login', 'password', 'bd')) {
  3.    exit('no connect');
  4.  }
  5.  $filedata = file_get_contents('upfiles/krest.bmp');
  6.  $stmt = oci_parse($conn, 'BEGIN pck.upload_photo(:id, :photo); END;');
  7.  $photo = oci_new_descriptor($conn, OCI_D_LOB);
  8.  $id = '101';
  9.  oci_bind_by_name($stmt, ':id', $id);
  10.  oci_bind_by_name($stmt, ':photo', $photo, -1, OCI_B_BLOB);
  11.  $photo->writetemporary($filedata);
  12.  $photo->close;
  13.  if (!oci_execute($stmt)) {
  14.    exit('no execute');
  15.  }
  16.  oci_commit($conn);
  17.  $photo->free;
  18.  oci_free_statement($stmt);
  19.  echo 'ok';
  20. ?>


Пробовал менять BLOB на CLOB - некоторое улучшение было (появился мусор в png и bmp сохранился без искажений цвета), но это явно не тот вариант, который нужен.

В чем может быть проблема?
Ivalar Отправлено: 06 Ноября, 2012 - 15:12:46 • Тема: Отключение header'ов • Форум: Вопросы новичков

Ответов: 7
Просмотров: 267
DeepVarvar пишет:
Ivalar пишет:
header('Server: '), которая, как уже сказал, у меня ни к чему не привела.
Мелкий пишет:
http://httpd.apache.org/docs/2.2...tml#servertokens

Спасибо, почитал повнимательнее. Сделаю через .htaccess с соответствующими конфигами.
Ivalar Отправлено: 06 Ноября, 2012 - 12:50:50 • Тема: Отключение header'ов • Форум: Вопросы новичков

Ответов: 7
Просмотров: 267
Спасибо за помощь. Этого должно быть достаточно для решения моей задачи.

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: '), которая, как уже сказал, у меня ни к чему не привела.
Ivalar Отправлено: 06 Ноября, 2012 - 12:13:27 • Тема: Отключение header'ов • Форум: Вопросы новичков

Ответов: 7
Просмотров: 267
caballero пишет:
обратись к разработчику неведомого "моста"
тут экстрасенсов нет чтобы догадатся шо сие такое

Как минимум один экстрасенс тут есть - я. Мои экстрасенсорные способности говорят, что текст выше ты не читал, а решил сделать +1 пост.

В решении данного вопроса "мост" не играет никакой роли, можешь забыть про него. С тем же успехом я могу запустить браузер, вбить адрес php-файла с добавлением GET-параметра и получить ответ (страницу) от apache-сервера. Вопрос лишь в заголовках этой страницы. Какой-нибудь "X-Powered-By" мне нафиг не вперся, но два десятка байт съедает.
Ivalar Отправлено: 06 Ноября, 2012 - 09:20:20 • Тема: Отключение header'ов • Форум: Вопросы новичков

Ответов: 7
Просмотров: 267
Есть php-файл, который принимает по http команды от "моста", обрабатывает их и выплевывает обратно html-страницу с закодированным ответом примерно такого вида:

-B--004E4F4A7777AN3S4HAHVQSETGMU AV8OAJDNKOQWABSH07C78401FF000007 C6000007C60002272C0002760F--E-

При этом у страницы имеется куча заголовков, подставляемых автоматически:
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

Таким образом получается, что заголовки страницы весят больше, чем сам ответ на команду. В условиях жесткой экономии траффика нужно уйти от этой лишней информации. Как и какие из этих заголовков можно безболезненно поотключать?
Ivalar Отправлено: 21 Декабря, 2011 - 13:22:47 • Тема: Как передать массив в хранимую процедуру Oracle • Форум: SQL и Архитектура БД

Ответов: 0
Просмотров: 30
Массив в PHP имеет такой вид:
Array ( [data] => Array ( [mas[0] => Array ( [param1] => xxx [param2] => yyy [param] => zzz) ) )

В примере выше 1 запись, но можно ли переслать несколько записей разом, а не по одной, кроме как каждый раз осуществяя запуск хранимой процедуры, производящей сохранение этих записей в БД? Как в хранимой процедуре реализовать работу с полученным массивом?

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB