PHP.SU

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

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

> Найдено сообщений: 5
Oskaria Отправлено: 11 Февраля, 2013 - 12:49:52 • Тема: simplexml_load_string() ругается на теги, которых не существует • Форум: XML и его обработка

Ответов: 3
Просмотров: 6656
Просто страница выводится в KOI8-R, а обрабатываемый файл в UTF-8 и сам файл со скриптом тоже в UTF-8.

Когда были проблемы с кодировкой, парсер ругался, что-то типа "The symbol do not found in UTF-8 encoding". Как-то так.

Проблема, к слову, чуть изменилась) Добавил в код костыль: str_ireplace("<user>", "", $xmlstr);, теперь стал ругаться, что <information> не имеет закрывающего тега.

Фигня какая-то)
Oskaria Отправлено: 11 Февраля, 2013 - 09:01:17 • Тема: simplexml_load_string() ругается на теги, которых не существует • Форум: XML и его обработка

Ответов: 3
Просмотров: 6656
Приветствую.

Суть такая - при обработке большого файла, я достаю из него части, написанные на xml и загружаю их через simplexml_load_string().
Проблема в том, что из 100 (плюс-минус) загрузок, функция некоторые не загружает, ругаясь:

Цитата:

Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 2: parser error : Opening and ending tag mismatch: information line 2 and user in C:\AppServ\www\test1.ru\xml\index.php on line 358

Warning: simplexml_load_string() [function.simplexml-load-string]: <information> </user> in C:\AppServ\www\test1.ru\xml\index.php on line 358

Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in C:\AppServ\www\test1.ru\xml\index.php on line 358

Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 3: parser error : Extra content at the end of the document in C:\AppServ\www\test1.ru\xml\index.php on line 358

Warning: simplexml_load_string() [function.simplexml-load-string]: <service id="1614"> in C:\AppServ\www\test1.ru\xml\index.php on line 358

Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in C:\AppServ\www\test1.ru\xml\index.php on line 358


Казалось бы всё просто, но ошибок в тегах XML нет. Не существует тега user или </user>, для <service id="1614"> есть закрывающий тег, внутри него тоже всё нормально, без ошибок.

Этот кусок XML:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <xml version="1.0" encoding="UTF-8">
  3.     <information>    
  4.      <service id="1614">
  5.         <name>"п-п¦п° п-п¦п¦п¦яLп+п+пTя¦"</name>
  6.         <login>"4959886896"</login>
  7.         <tariff id="314">
  8.             <name>"п-п¦я¦п©п¦п¦я-п+п¦я¦ п°п+я¦п¦п¦п¦ - п-я-п+п©п¦п¦п¦п+п+ - п¦я-п¦п+п¦п¦я-я-п+я-п¦"</name>
  9.             <type>"3"</type>
  10.         <category id="1001">
  11.           <name>"пёя¦п¦я¬пЁпT п¦п+я¬я-я-пTпTп+п+п+п¦п+п¦ я-п¦п¦п¦яLп+п+п+п+п¦ я¦п¦я¦пTпT 4959886896"</name>
  12.           <amount>"95.52"</amount>
  13.           <volume>"48"</volume>
  14.         </category>
  15.         </tariff>
  16.     </service>
  17.      <service id="1615">
  18.         <name>"п-п¦п° п-п¦п¦п¦яLп+п+пTя¦"</name>
  19.         <login>"4959886895"</login>
  20.         <tariff id="314">
  21.             <name>"п-п¦я¦п©п¦п¦я-п+п¦я¦ п°п+я¦п¦п¦п¦ - п-я-п+п©п¦п¦п¦п+п+ - п¦я-п¦п+п¦п¦я-я-п+я-п¦"</name>
  22.             <type>"3"</type>
  23.         <category id="1001">
  24.           <name>"пёя¦п¦я¬пЁпT п¦п+я¬я-я-пTпTп+п+п+п¦п+п¦ я-п¦п¦п¦яLп+п+п+п+п¦ я¦п¦я¦пTпT 4959886895"</name>
  25.           <amount>"726.35"</amount>
  26.           <volume>"365"</volume>
  27.         </category>
  28.         <category id="1003">
  29.           <name>"пёя¦п¦я¬пЁпT п+п¦пTп¦я¬пЁп+я-п+п¦п+п¦п¦ я-п¦п¦п¦яLп+п+п+п+п¦ я¦п¦я¦пTпT 4959886895"</name>
  30.           <amount>"94.4"</amount>
  31.           <volume>"55140.66"</volume>
  32.         </category>
  33.         </tariff>
  34.     </service>
  35.      <service id="1616">
  36.         <name>"п-п¦п° п-п¦п¦п¦яLп+п+пTя¦"</name>
  37.         <login>"4959888704"</login>
  38.         <tariff id="314">
  39.             <name>"п-п¦я¦п©п¦п¦я-п+п¦я¦ п°п+я¦п¦п¦п¦ - п-я-п+п©п¦п¦п¦п+п+ - п¦я-п¦п+п¦п¦я-я-п+я-п¦"</name>
  40.             <type>"3"</type>
  41.         <category id="1001">
  42.           <name>"пёя¦п¦я¬пЁпT п¦п+я¬я-я-пTпTп+п+п+п¦п+п¦ я-п¦п¦п¦яLп+п+п+п+п¦ я¦п¦я¦пTпT 4959888704"</name>
  43.           <amount>"845.75"</amount>
  44.           <volume>"425"</volume>
  45.         </category>
  46.         <category id="1002">
  47.           <name>"пёя¦п¦я¬пЁпT п+п¦пTп¦я¬п+п¦я-п+п¦п+п+п¦ я-п¦п¦п¦яLп+п+п+п+п¦ я¦п¦я¦пTпT 4959888704"</name>
  48.           <amount>"346.8"</amount>
  49.           <volume>"6038"</volume>
  50.         </category>
  51.         <category id="1003">
  52.           <name>"пёя¦п¦я¬пЁпT п+п¦пTп¦я¬пЁп+я-п+п¦п+п¦п¦ я-п¦п¦п¦яLп+п+п+п+п¦ я¦п¦я¦пTпT 4959888704"</name>
  53.           <amount>"398.76"</amount>
  54.           <volume>"55225.66"</volume>
  55.         </category>
  56.         </tariff>
  57.     </service>
  58.      <service id="1617">
  59.         <name>"п-п¦п° п-п¦п¦п¦яLп+п+пTя¦"</name>
  60.         <login>"4957390259"</login>
  61.         <tariff id="314">
  62.             <name>"п-п¦я¦п©п¦п¦я-п+п¦я¦ п°п+я¦п¦п¦п¦ - п-я-п+п©п¦п¦п¦п+п+ - п¦я-п¦п+п¦п¦я-я-п+я-п¦"</name>
  63.             <type>"3"</type>
  64.         <category id="1001">
  65.           <name>"пёя¦п¦я¬пЁпT п¦п+я¬я-я-пTпTп+п+п+п¦п+п¦ я-п¦п¦п¦яLп+п+п+п+п¦ я¦п¦я¦пTпT 4957390259"</name>
  66.           <amount>"1297.48"</amount>
  67.           <volume>"652"</volume>
  68.         </category>
  69.         <category id="1003">
  70.           <name>"пёя¦п¦я¬пЁпT п+п¦пTп¦я¬пЁп+я-п+п¦п+п¦п¦ я-п¦п¦п¦яLп+п+п+п+п¦ я¦п¦я¦пTпT 4957390259"</name>
  71.           <amount>"126.68"</amount>
  72.           <volume>"55258.66"</volume>
  73.         </category>
  74.         </tariff>
  75.     </service>
  76. </information>
  77.  

Не смотрите на иероглифы - скрипт под юниксовую консоль запустил в браузере

Собственно вопрос) Сталкивался ли кто-то с таким поведением simplexml_load_string()? Как можно бороться?
Oskaria Отправлено: 17 Декабря, 2012 - 12:44:44 • Тема: Ругается на * • Форум: Регулярные выражения

Ответов: 3
Просмотров: 214
Хм, спасибо, решил))

Получившееся выражение:
PHP:
скопировать код в буфер обмена
  1. preg_match("/[\s]{0,}[а-яА-Я]{3,4}[\s]{1,}([а-яА-я0-9 -_.]*)[0-9]{1,2}-[0-9]{1,2}-[0-9]{2,4}[\s -_.#0-9]/",$val, $result);


Не знаю на сколько верное, но работает)
(Добавление)
Ан нет, затык остался - в имени фирмы могут присутствовать скобки, простые, изменил выражение:

PHP:
скопировать код в буфер обмена
  1. preg_match("/[\s]{0,}[а-яА-Я]{3,4}[\s]{1,}([а-яА-Я0-9 -_.\)\(]*)[0-9]{2,}-[0-9]{1,2}-[0-9]{2,4}[\s -_.#0-9]/",$val, $result);


Но толку - 0. При поиске подобных символов надо их экранировать - так ведь? Но почему тогда не находит? Или экранировать надо не просто символом \, а какими-то ещё приблудами?
Oskaria Отправлено: 17 Декабря, 2012 - 10:37:51 • Тема: Ругается на * • Форум: Регулярные выражения

Ответов: 3
Просмотров: 214
Приветствую)

Только недавно начал изучать регулярные выражения, и вот столкнулся с затыком:
Нужно отфильтровать, жестко, имена файлов, по имени компании. Допустим есть файлы (массив):

PHP:
скопировать код в буфер обмена
  1. $where = array(
  2.           1 => "Акт АСТ30-11-12 _007894.xls",
  3.           2 => "Акт АСТЭГ30-11-12 _007897.xls",
  4.           3 => " Акт ДЕЛЬТА-ПАСТЫ30-11-12 _007981.xls",
  5.           4 => " Акт МАСТЕР БЕРГ-230-11-12 _001953.xls",
  6.           5 => "Акт ЭЛМА-ПАСТЫ30-11-12 _008506.xls",
  7.           6 => " Счет АСТ01-12-12 _009850.xls",
  8.           7 => "Счет АСТЭГ01-12-12 _009853.xls",
  9.           8 => "Счет ДЕЛЬТА-ПАСТЫ01-12-12 _009940.xls",
  10.           9 => "Счет МАСТЕР БЕРГ-201-12-12 _000910.xls",
  11.           10 => "Счет УПАКПЛАСТ01-12-12 _010404.xls",
  12.           11 => "Счет ЭЛМА-ПАСТЫ01-12-12 _010477.xls"
  13.           );


Я начинаю обходить массив, прогоняя каждое имя через preg_match(), сравнивая получившийся результат с искомым именем:

PHP:
скопировать код в буфер обмена
  1. $what = "АСТ";
  2.  
  3. foreach ($where as $key => $val) {
  4.  
  5.   $result = preg_match("/*[а-яА-Я]{3,4} (*)[0-9]{1,2}-[0-9]{1,2}-[0-9]{2,4}*/",$val);
  6.  
  7.   if (trim($result) == $what) {
  8.     echo $result." - ".$val."<br>";
  9.   }
  10.  
  11.  
  12. }


Т.е. мне нужно достать имя фирмы, из имени файла, которое скрывается после фразы "Счет" или "Акт", при условии что после этого слова есть пробел, перед ним пробел вероятен, а после имени идет дата через тире (год может быть как 2 так и 4 цифры) и прочие символы, никак меня не интересующие.

В итоге я получаю ошибку:

Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 0 in Z:\*** on line 20

Я так понял, что он ругается на самый первый символ '*', но я не смог найти решение проблемы, или причины, почему ему не понравился этот знак. Раньше этого символа не было, и он ругался на '*', который стоит в скобках.
Прошу помощи у знатоков - что я не так, своими кривыми руками, на-ваял?)
Oskaria Отправлено: 12 Октября, 2012 - 09:50:08 • Тема: Затык при работе с почтой гугла • Форум: Работа с сетью

Ответов: 2
Просмотров: 1493
Ситуация в следующем: никогда раньше не писал сам скрипты отправки почты, но тут появилась необходимость и, собственно, взялся.

Делал всё по мануалу с php.su, для начала по-практиковавшись через консольку. Всё вроде работает.

Далее написал уже сам скрипт, пытаюсь отправить почту и получаю от гугла ошибку, мол перед авторизацией надо отправить команду STARTTLS, которая, к слову, приводит к дисконнекту.

Долго-долго мучался я с этим гуглом, в итоге собрал следующее:

PHP:
скопировать код в буфер обмена
  1.  
  2. $smtp_conn = fsockopen("tls://smtp.gmail.com", 465,$errno, $errstr, 10);
  3.  
  4. fputs($smtp_conn,"EHLO mydomain\r\n");
  5. $data = get_data($smtp_conn);
  6. fwrite($file, $data);
  7.  
  8. fputs($smtp_conn,"AUTH LOGIN\r\n");
  9. $data = get_data($smtp_conn);
  10. fwrite($file, $data);
  11.  
  12. fputs($smtp_conn,base64_encode("почта")."\r\n");
  13. $data = get_data($smtp_conn);
  14. fwrite($file, $data);
  15.  
  16. fputs($smtp_conn,base64_encode("пароль")."\r\n");
  17. $data = get_data($smtp_conn);
  18. fwrite($file, $data);
  19.  


В таком виде подключается и не ругается на отсутствие каких-то команд, но гугл отвечает:
501 5.5.2 Cannot Decode response q2sm1963093lbd.14
Ну и почта не уходит, понятное дело.

Прошу помощи - как надо шифровать логин/пароль для гугла, если используем TLS шифрование соединения?

Думал я про готовые библиотеки, но у тех, которые я нашёл есть минус - они для отправки каждого письма делают новое подключение, т.е.:
Подключаемся > отправляем > отключаемся;
а мне нужно за раз отправить хотя бы 50 писем (это не спам, это рассылка документов клиентам и сотрудникам фирмы, раз в месяц). Всего писем может быть до 1000.

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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB