PHP.SU

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

Страниц (8): « 1 2 [3] 4 5 6 7 8 »

> Найдено сообщений: 108
freelsd Отправлено: 04 Марта, 2016 - 19:11:28 • Тема: Проверка содержимого файла. • Форум: Вопросы новичков

Ответов: 4
Просмотров: 236
ytrewq123 пишет:
Спасибо Вам подумаю. Мне как бы направление было нужно. Надеюсь сейчас справлюсь. Спасибо.


CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $f = file("text.txt");
  3. $numbers = array();
  4. for( $i = 1; $i <=30; $i++ ){
  5.         $numbers[] = $i;
  6. }
  7.  
  8. //print_r($numbers);
  9.  
  10. $result = array();
  11. foreach($f as $line){
  12.         if( preg_match_all("/\b([1-9]|[1-2][0-9]|30)\b/", $line, $matches) ){
  13.                 $found = $matches[0];
  14.                 //echo $line;
  15.                 foreach($found as $found_number){
  16.                         if ( !in_array($found_number, $result) )
  17.                                 $result[] = $found_number;
  18.                 }
  19.         }
  20.  
  21. }
  22.  
  23. //asort($result);
  24. //print_r($result);
  25. $flag = true;
  26. foreach($numbers as $num){
  27.                 if( !in_array($num, $result) )
  28.                         $flag = false;
  29. }
  30.  
  31. if(!$flag)
  32.         echo "Не все числа найдены!\n";
  33. else
  34.         echo "Все числа были найдены!\n";
  35.  


Вот готовый вариант если еще нужен. Только стоит учитывать что числа должны располагаться отдельно от других слов (то есть с пробелами а не слитно со всем текстом). Должно работать.
freelsd Отправлено: 04 Марта, 2016 - 12:21:16 • Тема: Поис по значений в масиве, array_filter • Форум: Вопросы новичков

Ответов: 3
Просмотров: 232
PHP:
скопировать код в буфер обмена
  1.  
  2. $myd = Array (
  3.         '0' => Array ( 'id' =>' 3093', 'photo' =>' files/catalog/3093_s.png' ),
  4.         '1' => Array ( 'id' =>' 2936', 'photo' =>' files/catalog/2936_s.png' ),
  5.         '2' => Array ( 'id' =>' 2921', 'photo' =>' files/catalog/2936_s.png' )
  6.         );
  7.  
  8. $elements_list = array(2936, 2921);
  9.  
  10. function exclude_elements($var){
  11.         global $elements_list;
  12.         foreach($elements_list as $element){
  13.                 if( (int)$var['id'] === $element ){
  14.                         return false;
  15.                 }
  16.         }
  17.         return true;
  18. }
  19.  
  20.  
  21. $result = array_filter($myd, 'exclude_elements');
  22. print_r($result);
  23.  



Через global в функию передаются элементы, которые нужно отфильтровать (в вашем же случае ничего не работало, потому что функция odd не знала ни про какой массив $qwerty - для нее он был локальным), потом применяем функцию ко всем элементам исходного массива. Кроме того у вас id почему-то является строковой переменной: '3093' вместо 3093, поэтому элементы приводятся к целочисленному типу (int).
freelsd Отправлено: 04 Марта, 2016 - 09:39:14 • Тема: Проверка содержимого файла. • Форум: Вопросы новичков

Ответов: 4
Просмотров: 236
ytrewq123 пишет:
Здравствуйте!
Вот такой вопросец. Мне надо проверить есть ли в файле все числа от 1 до 30. Они могут быть в разброс. Как понимаю регулярным выражением надо. Или как-то иначе? Если регулярным не подскажите как примерно писать.


Регулярка, например такая: ,(с ней еще поиграться нужно потому что я не спец по регекспам) но если надо проверить есть ли в файле все числа, то наверное нужно ее применить к каждой строке а потом сравнить с эталонным массивом (в котором находятся числа от 1 до 30) и если все значения из эталонного массива есть в конечном то задача выполнена - все числа нашлись.
freelsd Отправлено: 04 Марта, 2016 - 09:33:43 • Тема: Организация простой очереди обработки данных • Форум: Вопросы новичков

Ответов: 2
Просмотров: 160
Мелкий пишет:
Эффективнее - сервер очередей. gearman и чего-нибудь в том же духе.

Но и описанный вами алгоритм тоже встречается довольно часто и сложностей не представляет.

Понял, спасибо.
freelsd Отправлено: 03 Марта, 2016 - 09:56:57 • Тема: Организация простой очереди обработки данных • Форум: Вопросы новичков

Ответов: 2
Просмотров: 160
Суть такова: пользователь загружает файл на обработку, и если обработка уже идет то файл ставится в очередь. Я так понимаю, что для этого нужно в памяти держать скрипт, который, например каждую минуту будет опрашивать бд и смотреть есть ли там новые задачи. Но может есть способы проще и/или эффективнее (сервер на вин).
freelsd Отправлено: 16 Февраля, 2016 - 11:47:26 • Тема: XMPPHP certificate verify failed • Форум: Вопросы новичков

Ответов: 0
Просмотров: 103
Не могу подключиться к серверу из-за этой ошибки. Можно ли как-нибудь отключить проверку подлинности сертификата? Вообще какая-то странная библиотека - подключения не произошло а скрипт продолжает висеть (по таймауту не отключается ). И документации по ней мало.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. require_once("XMPPHP/XMPP.php");
  5.  
  6.  
  7. #Use XMPPHP_Log::LEVEL_VERBOSE to get more logging for error reports
  8. #If this doesn't work, are you running 64-bit PHP with < 5.2.6?
  9. $conn = new XMPPHP_XMPP('server', 5222, 'user', 'pass', 'xmpphp', '', $printlog=true, $loglevel=XMPPHP_Log::LEVEL_INFO);
  10. //$conn->useEncryption(false);
  11. try {
  12.  
  13.     $conn->connect();
  14.     $conn->processUntil('session_start');
  15.     $conn->presence();
  16.     $conn->message('test@server.ru', 'hi there!');
  17.     $conn->disconnect();
  18. } catch(XMPPHP_Exception $e) {
  19.     die($e->getMessage());
  20. }
  21.  
  22.  
  23.  



Может кому пригодится на будущее: чтобы отключить проверку сертификата, нужно в файле XMLStream.php в методе connect немного изменить код:

PHP:
скопировать код в буфер обмена
  1.  
  2. try {
  3.         //Не проверять подлинность сертификата сервера
  4.         $arrContextOptions = array("ssl"=>array(
  5.                 "allow_self_signed"=>true,
  6.                 "verify_peer"=>false,
  7.                 ));
  8.         $cont = stream_context_create($arrContextOptions);
  9.         //$this->socket = @stream_socket_client("$conntype://{$this->host}:{$this->port}", $errno, $errstr, $timeout, $conflag);
  10. $this->socket = @stream_socket_client("$conntype://{$this->host}:{$this->port}", $errno, $errstr, $timeout, $conflag, $cont);
  11. } catch (Exception $e) {
  12.         throw new XMPPHP_Exception($e->getMessage());
  13. }
  14.  
  15.  
freelsd Отправлено: 13 Февраля, 2016 - 12:42:45 • Тема: Загрузить файл в память для последующего использования (чтения через fopen) • Форум: Работа с файловой системой и файлами

Ответов: 6
Просмотров: 1560
Мелкий пишет:
Поставьте xdebug, включите профилирование и посмотрите потом в kcachegrind'е где и сколько времени тратите.
Всяко полезнее будет, чем тыкать пальцем в небо "наверное, медленно с диска читается"


Спасибо большое!
freelsd Отправлено: 13 Февраля, 2016 - 12:11:22 • Тема: Загрузить файл в память для последующего использования (чтения через fopen) • Форум: Работа с файловой системой и файлами

Ответов: 6
Просмотров: 1560
Мелкий пишет:
С точки зрения системного апи - да, получение дескриптора файла на чтение каждый раз новое.
Вот только это не имеет ничего общего с обращением к физическому диску - это на усмотрение ОС. Дисковый кэш уже давным-давно реализован. При чтении блока, этот блок сохраняется в RAM, последующие запросы на чтение этого блока обрабатываются уже напрямую из RAM. Запись в файл, к слову, тоже осуществляется в памяти. На диск изменения (ака грязные страницы) сбрасываются через вызов fsync вручную или по таймеру или по достижении некоторого порогового числа этих грязных страниц.

PHP не экспортирует флаги вроде O_DIRECT. Поэтому, если только файл в принципе помещается в память и достаточно часто используется - с диска он читается только один раз.


А это можно как-то экспериментально проверить - читается ли он один раз или при каждом вызове fopen?
freelsd Отправлено: 13 Февраля, 2016 - 11:34:54 • Тема: Загрузить файл в память для последующего использования (чтения через fopen) • Форум: Работа с файловой системой и файлами

Ответов: 6
Просмотров: 1560
Мелкий пишет:
Если файл только читается - он и так с диска читается только при первом обращении, затем из памяти.
емнип, даже под виндами дисковый кэш работает.

Там, вроде каждое обращение к геоип базе это открытие файла заново. И в общем-то интересно, как бинарный файл в память загрузить для работы. По теме ничего особо толкового не нашел.
freelsd Отправлено: 13 Февраля, 2016 - 10:54:34 • Тема: Загрузить файл в память для последующего использования (чтения через fopen) • Форум: Работа с файловой системой и файлами

Ответов: 6
Просмотров: 1560
Есть api jот геоип, который ищет в файле информацию по определенному ип. Но с диска все это происходит очень медленно. Вопрос вот в чем: можно ли загрузить файл в память, чтобы к нему потому можно было обращаться как к обычному файлу (читать, писать и тд). Файл бинарный. Спасибо.
freelsd Отправлено: 12 Февраля, 2016 - 19:35:11 • Тема: Обработка больших файлов на PHP (до ~2 gb) • Форум: Вопросы новичков

Ответов: 0
Просмотров: 61
Нужно обработать большой файл, посмотреть некоторые данные в строках и если нужно, добавить записи в бд. Как можно ускорить работу? Я так понимаю нужно использовать многопоточность и pthreads?
freelsd Отправлено: 06 Февраля, 2016 - 15:37:26 • Тема: Составление sql запроса на основе данных от пользователя? • Форум: Вопросы новичков

Ответов: 11
Просмотров: 365
rasschitai пишет:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $param=$_REQUEST;
  3. // тут экранируем
  4.  
  5. $and=false;
  6. if(isset($param['param1']) && $param['param1']!=''){
  7.  
  8.    $and[]="param1='{$param['param1']}'";
  9.  
  10. }
  11. // условия
  12. // условия
  13.  
  14. $sql="select * from table1 ";
  15. if($and){
  16.  
  17.    $sql.="where ".join(' and ',$and);
  18. }
  19.  


Спасибо большое за код, но уже решил.
freelsd Отправлено: 04 Февраля, 2016 - 10:28:26 • Тема: Составление sql запроса на основе данных от пользователя? • Форум: Вопросы новичков

Ответов: 11
Просмотров: 365
Viper пишет:

PHP:
скопировать код в буфер обмена
  1. foreach ($data as $key => $value)

В $key у вас имя переменной, в $value её значение. Вот и проверяйте наличие значения 1 раз.


Я понимаю, я же сказал что проблема именно в составлении запроса а не в получении переменных: если есть параметр и он идет первым, то сначала дописываем where, а если параметр не первый то пишем and, а если параметров нет то условие не дописываем. Да, и условия для разных переменных разные, где-то просто сравнение where text_param=value а где-то поиск по диапазону where num_param > value1 and num_param < value2. Я примерно представляю как это сделать, но хотелось бы знать как такое на практике реализуют и какие способы есть. Может пример приведете если не трудно?
freelsd Отправлено: 04 Февраля, 2016 - 09:06:15 • Тема: Составление sql запроса на основе данных от пользователя? • Форум: Вопросы новичков

Ответов: 11
Просмотров: 365
TuX560 пишет:

Самый простой вариант - задать значения по умолчанию, если они не пришли от пользователя


По умолчанию мне нужно тогда все записи показать, без каких-либо условий.
freelsd Отправлено: 03 Февраля, 2016 - 22:12:38 • Тема: Составление sql запроса на основе данных от пользователя? • Форум: Вопросы новичков

Ответов: 11
Просмотров: 365
Viper пишет:
freelsd пишет:
Нет, задача не совсем в этом. Нужно на основе того какие параметры выберет пользователь составить запрос. Например захотел он чтобы в запросе были все записи не позднее какой-то даты, соответственно в запросе добавилось "where lastdate > user_param_data", а если ему нужно выбрать по определенному городу то where city="user_selected_city". В первом посте я пример привел. То поля и условия, которые будут в запросе составляются пользователем. Так понятней должно быть.
ещё раз вдумчиво перечитайте свой вопрос и мой ответ.


Я перечитал. Основная проблема как-раз в "подставлянии". Узнать, допустим, есть ли условия для выборки чтобы добавить в результирующую строку where это несложно. Но потом нужно определять если параметр первый в выборке, то and не дописывать в него. Получается что нужно много условий. И чем больше параметров тем больше условий городить. То есть пользователь может вообще никаких параметров не выбирать, а может выбрать только некоторые из них и исходя из этого нужно составить запрос с условиями.

Страниц (8): « 1 2 [3] 4 5 6 7 8 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB