PHP.SU

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

Страниц (22): [1] 2 3 4 5 6 7 8 9 ... » В конец

> Найдено сообщений: 327
antobra Отправлено: 30 Августа, 2019 - 11:44:08 • Тема: Сокет AF_UNIX и одновременный доступ • Форум: Вопросы новичков

Ответов: 2
Просмотров: 461
Добрый день. Подскажите, кто знает ответ. У меня есть демон на php, который работает на этом же сервере и которому надо локально отправлять некоторые данные через сокет.

Сама настройка вопросов не вызвала, но возник вопрос - сокет с семейством AF_UNIX создает файлы в указанном месте и как я пониманию, то передаваемые данные записываются в этот файл, а после считываются демоном из этого же файла.

Код сервера с php.net:
PHP:
скопировать код в буфер обмена
  1.  
  2. $server_side_sock = dirname(__FILE__)."/server.sock";
  3. if (!socket_bind($socket, $server_side_sock))
  4.         die("Unable to bind to $server_side_sock");
  5.  
  6.  


Код клиента с php.net:
PHP:
скопировать код в буфер обмена
  1.  
  2. // no binding is required if you wish only send and never receive
  3. $client_side_sock = dirname(__FILE__)."/client.sock";
  4. if (!socket_bind($socket, $client_side_sock))
  5.         die("Unable to bind to $client_side_sock");
  6.  


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

Благодарю за внимание
antobra Отправлено: 15 Мая, 2019 - 22:44:09 • Тема: Сортировка массива по определенным ключам другого массива • Форум: Вопросы новичков

Ответов: 4
Просмотров: 520
Коллеги, огромное спасибо. Поблагодарил через "Спасибо!" всех причастных!)
antobra Отправлено: 19 Апреля, 2019 - 11:21:38 • Тема: Сортировка массива по определенным ключам другого массива • Форум: Вопросы новичков

Ответов: 4
Просмотров: 520
Коллеги, подскажите, пожайлуста, "красивое" решение следующей задачи, до которой не могу дойти самостоятельно.

Имеем большой массив с множеством ключей и значений:

PHP:
скопировать код в буфер обмена
  1. $array = [
  2.  
  3.         'key1' => [ 'somevalue' => 'somevalue', 'type' => 'red' ],
  4.         'key2' => [ 'somevalue' => 'somevalue', 'type' => 'pink' ],
  5.         'key3' => [ 'somevalue' => 'somevalue', 'type' => 'red' ],
  6.         'key4' => [ 'somevalue' => 'somevalue', 'type' => 'pink' ],
  7.         'key5' => [ 'somevalue' => 'somevalue', 'type' => 'white' ],
  8.         'key6' => [ 'somevalue' => 'somevalue', 'type' => 'blue' ],
  9.  
  10. ];
  11.  

Имеем правила сортировки, которые говорят в каком порядке должен быть $array по ключу 'type'.

PHP:
скопировать код в буфер обмена
  1. $rules = [
  2.  
  3.         'blue',
  4.         'red',
  5.         'pink'
  6.  
  7. ];


Таким образом необходимо получить:

PHP:
скопировать код в буфер обмена
  1. $array = [
  2.  
  3.         'key6' => [ 'somevalue' => 'somevalue', 'type' => 'blue' ],
  4.         'key1' => [ 'somevalue' => 'somevalue', 'type' => 'red' ],
  5.         'key3' => [ 'somevalue' => 'somevalue', 'type' => 'red' ],
  6.         'key2' => [ 'somevalue' => 'somevalue', 'type' => 'pink' ],
  7.         'key4' => [ 'somevalue' => 'somevalue', 'type' => 'pink' ],
  8.         'key5' => [ 'somevalue' => 'somevalue', 'type' => 'white' ],
  9.        
  10.  
  11. ];


Если в rules нет ключа, который есть в $array (например, white), то он помещается в конец.

Буду благодарен за помощь
antobra Отправлено: 03 Октября, 2018 - 14:44:31 • Тема: Проверка входящих данных перед загрузкой файла • Форум: Вопросы новичков

Ответов: 1
Просмотров: 181
Здравствуйте
Подскажите, как можно проверить входящие данные перед непосредственной загрузкой файла.

Что я имею в виду: Есть некий юзер, он загружает некий файл.
Но я, как админ, перед загрузкой любого файла хочу проверить данные этого юзера (имеет ли он право загружать, id сессии и прочее).
Но файл сначала загружается и только после выполняется твой код с проверками и прочим. Это не логично и затратно.

Как реализовать проверку каких-либо данных перед загрузкой файла?

Спасибо
antobra Отправлено: 28 Апреля, 2018 - 13:35:48 • Тема: Вырезать внутренность тега, когда внутри еще теги • Форум: Регулярные выражения

Ответов: 2
Просмотров: 487
Огромное спасибо. Все оказалось очень просто! Надеюсь, эта регулярное поможет другим, кто ищет такое же решение)
antobra Отправлено: 27 Апреля, 2018 - 22:38:45 • Тема: Вырезать внутренность тега, когда внутри еще теги • Форум: Регулярные выражения

Ответов: 2
Просмотров: 487
Приветствую!

Подскажите, как решить такую задачку с помощью регулярных выражений.

Имеем обычный HTML код любой из страниц сети:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <body>
  3. /* some code */
  4. <div>
  5. <p>Text text text <a href="url">more</a></p>
  6. <p>Another one text without URL</p>
  7. </div>
  8. <ol>
  9. <li><a href="url2">Value 1</a> is important value la-la-la</li>
  10. <li>Value 2 - it has not any links and it so sad</li>
  11. <li>Value 3 - there is no description but you can <a href="url3">add</a></li>
  12. </ol>
  13. <div>Some text in DIV</div>
  14. /* some code */
  15. </body>
  16.  


Задача: получить содержимое каждого тега из этого списка: <p><li><div><td><br><blockquote><dd>
Можно заметить, что некоторые теги из этого списка вложены в другие. В этом вся задача.

Мое регулярное
PHP:
скопировать код в буфер обмена
  1. preg_match_all ( '#(<p.?>(.+)</p>)|(<li.?>(.+)</li>)|(<div.?>(.+)</div>)|(<td.?>(.+)</td>)|(<blockquote.?>(.+)</blockquote>)|(<dd.?>(.+)</dd>)#isU', strip_tags ( $text, '<a><p><li><div><td><br><blockquote><dd>' ), $return );

выдает следующее:
PHP:
скопировать код в буфер обмена
  1.  
  2. (
  3.             [0] => <div>
  4. <p>Text text text <a href="url">more</a></p>
  5. <p>Another one text without URL</p>
  6. </div>
  7.             [1] => <li><a href="url2">Value 1</a> is important value la-la-la</li>
  8.             [2] => <li>Value 2 - it has not any links and it so sad</li>
  9.             [3] => <li>Value 3 - there is no description but you can <a href="url3">add</a></li>
  10.             [4] => <div>Some text in DIV</div>
  11.         )
  12.  
  13.  


А необходимо:

PHP:
скопировать код в буфер обмена
  1.  
  2. (
  3.             [0] => <p>Text text text <a href="url">more</a></p>
  4.             [1] => <p>Another one text without URL</p>
  5.             [1] => <li><a href="url2">Value 1</a> is important value la-la-la</li>
  6.             [2] => <li>Value 2 - it has not any links and it so sad</li>
  7.             [3] => <li>Value 3 - there is no description but you can <a href="url3">add</a></li>
  8.             [4] => <div>Some text in DIV</div>
  9.         )
  10.  


То есть необходимо самое последнее совпадение внутри последнего тега. Сейчас так получается, что регулярное встречает первое знакомое и все внутренние совпадения игнорирует.

* Тег <a> я посчитал важным отметить, тк он будет нужен после этой регулярки (но не в рамках этой задачи).
antobra Отправлено: 19 Января, 2018 - 18:20:16 • Тема: Получить, обработать, записать - сложности • Форум: Работа с файловой системой и файлами

Ответов: 5
Просмотров: 2115
Мелкий пишет:
antobra пишет:
в logs.txt появляются дубли ID

И это если ещё везёт.
Реально можно повредить структуру строки, потерянная запись, частичная запись поверх и другие приключения.

antobra пишет:
Самое первое - это flock. Его проблема это блокировка файла на момент записи. С записью как раз проблем нет.

Читать последнюю строку с намерением что-то писать на её основе вы должны строго после взятия write flock.
fopen
flock write
fread
some calc
write
unlock
fclose

Если проблема со счётчиком - поставьте рядом redis. Атомарный инкремент там есть, да и сам по себе штук не бесполезный.
Если проблема не только со счётчиком, а ещё и хранением данных - то используйте знакомую вашей команде СУБД. У всех распространённых должны быть конкурентно-безопасные сиквенсы.


Да, пару раз данные были нечитаемыми Улыбка

Попробую ваши варианты с flock, после с redis.
Эта функция не имеет высокий приоритет и поэтому скорость и ресурсы сервера важней. Выбирается самый экономичный способ
(Добавление)
andrewkard пишет:
antobra пишет:
БД будет слишком медленной -- много запросов. И думаю, сервер сильно потеряет в производительности.

много это сколько? В сек.


конкретно сейчас среднее - 600 в сек, цифра меняется в зависимости от дня, времени и пр
antobra Отправлено: 19 Января, 2018 - 18:12:33 • Тема: Получить, обработать, записать - сложности • Форум: Работа с файловой системой и файлами

Ответов: 5
Просмотров: 2115
andrewkard пишет:
antobra пишет:
Следуя этой логике необходим только один процесс, который будет добавлять записи с нужным ID. Но не могу сообразить как это осуществить.

очередь

А почему не хотите в таблицу БД перенести с колонкой автоинкремент?


Тоже размышляю над очередью. Что-то вроде: сначала просто в конец файла без ID писать, а потом каким-то скриптом по cron дописывать в конец каждой строчки сумму ( номер этой строчки + последний ID с прошлого выполнения).

БД будет слишком медленной -- много запросов. И думаю, сервер сильно потеряет в производительности.
antobra Отправлено: 19 Января, 2018 - 17:27:19 • Тема: Получить, обработать, записать - сложности • Форум: Работа с файловой системой и файлами

Ответов: 5
Просмотров: 2115
Приветствую всех зашедших!

Пытаюсь сообразить как сделать и не могу понять, если кто знает, дайте знать.

Есть файл, например: logs.txt

С этим файлом проходит следующая работа -
1. Изымается последняя строка
2. Из этой строки изымается ID (порядковый номер)
3. Вносится в конец файла новая строка с ID+1
Все просто.

Но вопрос вот в чем:

Это делает не один скрипт/демон/процесс, а много процессов. То есть 100 юзеров сделало запрос и все запросы ломанулись в logs.txt.
И многие уже поняли, что в logs.txt появляются дубли ID. То есть, скрипт открыл файл взял ID и положил новые данные. И так же сделало еще несколько процессов.

Мои мысли на эту тему:
Самое первое - это flock. Его проблема это блокировка файла на момент записи. С записью как раз проблем нет. Дело в том, что сразу много запросов получили информацию о том, что в конкретный момент времени ID = 1500. Они и записали 1501, как следующий.
Следуя этой логике необходим только один процесс, который будет добавлять записи с нужным ID. Но не могу сообразить как это осуществить.

Так же информация, которая может быть полезной:
- ID обязателен. Отказаться от ID не могу
- 100 запросов это лишь пример. В реальности их больше.

Это скорей вопрос не к PHP, а к организации и архитектуре такой функции, как постоянная выдача следующего ID без ошибок и повторов.

Может у кого есть мысли?
antobra Отправлено: 29 Июня, 2017 - 23:50:07 • Тема: Получить содержимое из тэга <P>, но если в содержимом не встречается тэг P • Форум: Регулярные выражения

Ответов: 7
Просмотров: 642
Строитель,

Нет, атрибуты не нужны. Хотя бы значения Улыбка

В вашем варианте теги со значениями, в которых есть перенос строки, не отображаются.

Хотя.. если перед этим убирать перенос строк с помощью str_replace ( "\n", NULL, $string ), то вроде будет работать.

Попробовал убрать перенос строк. Не работает. Он все значения помещает в одно значение

PHP:
скопировать код в буфер обмена
  1.  
  2. $str = '<body>
  3. ...some code...
  4. <p class="any_class">
  5.   <p class="any_class" anyAttribute="anyValue">Value 1</p>
  6.   <p class="any_class" anyAttribute="anyValue">Value 2</p>
  7.   <p class="any_class" anyAttribute="anyValue">Value 3</p>
  8. </p>
  9. <p class="any_class">
  10.   <p class="any_class" anyAttribute="anyValue">Value 4
  11.  
  12.  
  13.   </p>
  14.   <p class="any_class" anyAttribute="anyValue">Value 5</p>
  15. </p>
  16. ...some code...
  17. </body>';
  18.  
  19. preg_match_all('~<p[^>]*>(.+)</p>~m',  str_replace ( "\n", NULL, $str ), $a);
  20.  
  21. echo '<pre>'; var_dump($a); echo '</pre>';
  22.  
  23.  
antobra Отправлено: 29 Июня, 2017 - 23:17:30 • Тема: Получить содержимое из тэга <P>, но если в содержимом не встречается тэг P • Форум: Регулярные выражения

Ответов: 7
Просмотров: 642
Строитель пишет:
antobra, вам нужно пропускать параграф с атрибутом "list"?


Нет, нужно чтобы он выдавал содержимое <p> без внутренних вложений других <p>.

Например из

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <body>
  3. ...some code...
  4. <p class="any_class">
  5.     <p class="any_class" anyAttribute="anyValue">Value 1</p>
  6.     <p class="any_class" anyAttribute="anyValue">Value 2</p>
  7.     <p class="any_class" anyAttribute="anyValue">Value 3</p>
  8. </p>
  9. <p class="any_class">
  10.     <p class="any_class" anyAttribute="anyValue">Value 4</p>
  11.     <p class="any_class" anyAttribute="anyValue">Value 5</p>
  12. </p>
  13. ...some code...
  14. </body>
  15.  


Нужен результат

Цитата:

1. <p class="any_class" anyAttribute="anyValue">Value 1</p>
2. <p class="any_class" anyAttribute="anyValue">Value 2</p>
3. <p class="any_class" anyAttribute="anyValue">Value 3</p>
4. <p class="any_class" anyAttribute="anyValue">Value 4</p>
5. <p class="any_class" anyAttribute="anyValue">Value 5</p>


А в моем регулярном сейчас

Цитата:

1. <p class="any_class"><p class="any_class" anyAttribute="anyValue">Value 1</p>
2. <p class="any_class" anyAttribute="anyValue">Value 2</p>
3. <p class="any_class" anyAttribute="anyValue">Value 3</p>
4. <p class="any_class"><p class="any_class" anyAttribute="anyValue">Value 4</p>
5. <p class="any_class" anyAttribute="anyValue">Value 5</p>


Порядок тэгов не постоянен, соответственно привязать регулярное к конкретной странице нельзя.
antobra Отправлено: 29 Июня, 2017 - 22:40:33 • Тема: Получить содержимое из тэга <P>, но если в содержимом не встречается тэг P • Форум: Регулярные выражения

Ответов: 7
Просмотров: 642
Приветствую коллеги!

Прошу помощи в регулярном выражении.

Имею регулярное, получающее содержимое тэга <P> в неком HTML коде:

Цитата:
'#\<p(\>|\s+[^\>]*\>)(.+?)\<\/p\>#is'


Все вроде должно быть хорошо, но, очень часто встречается тэги <P> вложенные в другой тэг <P>.

Например из этого HTML мы получим хороший результат из двух <P>
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <body>
  3. <p>Some text here</p>
  4. <p class="info">Some text here #2</p>
  5. </body>
  6.  


Но стоит изменить на это

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <body>
  3. <p class="list">
  4.     <p class="name">Text text text</p>
  5.     <p class="info">Text #2 Text # 2</p>
  6. </p>
  7. </body>
  8.  

и мы получим захваченное такое
Цитата:

1. <p class="list"> <p class="name">Text text text</p>
2. <p class="info">Text #2 Text # 2</p>


Он пропускает повторное объявление тега <p class="name">. А должен пропустить <p class="list">, приняв во внимание новое объявление тэга и парсить в нем.
Как внести в исключения в часть (.+?), чтобы он перепроверял наличие первых скобок и отбрасывал такое, как не подходящее. Или есть другие способы?

Уверен, это как-то реализуемо Улыбка
antobra Отправлено: 10 Января, 2017 - 17:38:19 • Тема: Вырезать из огромного текста кусочек, если он не содержит слово используя preg_match_all • Форум: Регулярные выражения

Ответов: 3
Просмотров: 348
Мелкий пишет:
CODE (regex):
скопировать код в буфер обмена
  1. слово1(?:(?!особоеСлово).)+слово7

?


В таком случае возвращает массив с пустыми значениями

Upd:Моя ошибка. Не заменил слово. Спасибо от всей души Улыбка
antobra Отправлено: 10 Января, 2017 - 17:12:34 • Тема: Вырезать из огромного текста кусочек, если он не содержит слово используя preg_match_all • Форум: Регулярные выражения

Ответов: 3
Просмотров: 348
Здравствуйте,

Подскажите как вырезать из огромного текста кусочек текста, если он не содержит конкретного слова или слов?

Например текст:
Цитата:
... some text ...
Слово1 слово2 слово3 особоеСлово слово4 слово5 слово6 слово7
Слово1 слово2 слово3 слово4 слово5 слово6 слово7
... some text ...


И например регулярное выражение
PHP:
скопировать код в буфер обмена
  1. preg_match_all ( '#слово1(.+)слово7#isU', $text, $output );

вернет массив с двумя ключами первую строчку без особого слова и вторую.

А как вернуть только ту, где нет этого слова? Пробовал по-всякому
PHP:
скопировать код в буфер обмена
  1. preg_match_all ( '#слово1((?!особоеСлово).+)слово7#isU', $text, $output );

Не помогает.

Можно предложить просто брать второй ключ из полученного результата, но текст постоянно меняется местами и таких выражений для парсинга не 2 (как в этом примере), а много.

Как это можно решить? Все инструкции в интернете дают (!?someword), но это не работает.

Спасибо
antobra Отправлено: 27 Июля, 2016 - 18:22:48 • Тема: Права на папки и файлы сайта • Форум: Apache и другие веб-серверы

Ответов: 1
Просмотров: 473
Приветствую, надеюсь на ваши подсказки в следующих вопросах, которые скорей о безопасности, чем о реализации.

1. Кто должен быть владельцем основной папки где лежит сайт? Например /var/www/site.ru/
Можно ли назначить www-data? Или безопасней будет другого пользователя ?

2. Кого назначить владельцем всех папок и файлов сайта ? www-data? или другого?

3. Если необходима папка, куда пользователь может загрузить файл, то какие дать права и кого назначить хозяином? 755 и www-data?

Еще раз отмечу, что вопросы с точки зрения безопасности.

Огромное спасибо за ваше время и ответы.

Страниц (22): [1] 2 3 4 5 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB