Перейти к содержимому


Вычисления или сравнения?


Сообщений в теме: 26

#1 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 25 Январь 2012 - 14:45

Возник еще один вопрос :)

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

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 25 Январь 2012 - 15:06

Можно. Поместите ваш скрипт в крон и задайте переодичность выполнения.

#3 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 26 Январь 2012 - 06:40

Сделал. Сам скрипт если запускать на хостинге отлично работает. Почта приходит как надо. Засунул в крон, в логах пишет вот такую ошибку:

2012-01-26 03:36:02 - <br />
<b>Warning</b>: DOMDocument::loadHTML() [<a href='domdocument.loadhtml'>domdocument.loadhtml</a>]: htmlParseEntityRef: expecting ';' in Entity, line: 99 in <b>C:\Program Files\MSTL\


#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 26 Январь 2012 - 08:43

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

#5 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 26 Январь 2012 - 08:47

Подскажите как запустить скрипт на хостинге?

У меня локальная версия КБ. Если нет возможности запустить с крона КБ на хостинге, то как быть? Что необходимо настроить в локальном сервере КБ?

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 26 Январь 2012 - 08:57

Для крона КБ не нужна, крон - это встроенная возможность выполнения скриптов по расписанию, присутствует почти на всех хостингах. Как настроить крон - есть в том числе в документации по КБ: http://clientbase.ru..._admin_16/cron/ Только вместо пути к cron.php указываете путь к своему файлику. Также вместо минутной периодичности можно задать свою.

#7 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 26 Январь 2012 - 09:01

Дак мне необходимо чтобы этот файл выполнялся в КБ!!! :(

#8 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 26 Январь 2012 - 09:15

Просмотр сообщенияdolphin (26 Январь 2012 - 09:01) писал:

Дак мне необходимо чтобы этот файл выполнялся в КБ!!! :(
Смысл? Из вашего описания я понял что вам нужно отправлять данные на почту, а не в КБ. Тем более что опять же из ваших слов, "скрипт на хостинге отлично работает"

#9 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 26 Январь 2012 - 09:22

дак энто первая необходимость на почту, а вторая необходимость, дабы следить за курсами валют, будет заполнять их в отдельную таблицу в КБ

#10 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 26 Январь 2012 - 09:26

Ну дак с этого и надо было начинать. Значит вам необходимо переделать код вычисления на совместимость с локальной версией. Код то приведите для начала.

#11 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 26 Январь 2012 - 09:28

    $html = file_get_contents('http://www.nbkr.kg');
    /** создаем новый dom-объект **/
    $dom = new domDocument;
    /** загружаем html в объект **/
    $dom->loadHTML($html);
    $dom->preserveWhiteSpace = false;
    /** элемент по тэгу **/
    $tables = $dom->getElementsByTagName('table');
    /** получаем все строки таблицы **/
    $rows = $tables->item(0)->getElementsByTagName('tr');
    /** цикл по строкам надо 15 **/
    foreach ($rows as $row)
    {
	    /** все ячейки по тэгу **/
	    $cols = $row->getElementsByTagName('td');
	    /** выводим значения **/
  if (  $schet == 14 ) {
  $infoUSD = 'KGS/1 USD - '.$cols->item(0)->nodeValue;
  }
  if (  $schet == 15 ) {
  $infoEUR = 'KGS/1 EUR - '.$cols->item(0)->nodeValue;
  }
  if (  $schet == 16 ) {
  $infoRUB = 'KGS/1 RUB - '.$cols->item(0)->nodeValue;
  }
  $schet=$schet+1;

}
$info = $infoUSD."\n";
  $info .= $infoEUR."\n";
  $info .= $infoRUB."\n";
$info .= "\n\nCreated by Aerobot.";
    $send_to = 'xxx@aero.kg' . ', ';
   $send_to .= 'xxxxx@aero.kg';
   
	   $subject = "Курсы валют на сегодня для ТФ";
  /*  $info = "telo"; */
    $headers = 'From: xx@aero.kg' . "\r\n" .
    'Reply-To: xx@aero.kg';
  mail($send_to, $subject, $info, $headers);


#12 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 26 Январь 2012 - 09:34

1. Функция file_get_contents гарантированно читает только локальные файлы, сайты в общем случаем читать ей нельзя. Используйте класс Snoopy.
2. Фунция mail работает только на хостингах с почтовым сервером, на локальной версии его нет. Используйте функцию sendmail(тема, текст, адресат), она использует настройки smtp, добавленные вами в КБ.

#13 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 26 Январь 2012 - 09:39

Скажите, а класс Snoopy уже входит в поставку КБ локальной версии? Или надо подключать?

#14 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 26 Январь 2012 - 10:01

Уже входит, подключать не надо.

#15 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 26 Январь 2012 - 10:08

Хм... :) почему же тогда выдает ошибку:

2012-01-26 07:07:02 - Task terminated
<br />
<b>Fatal error</b>: Call to undefined function fetch() in <b>C:\Program Files\MSTL\

Кусок кода, который поменялся в скрипте:
    $html = fetch('http://www.nbkr.kg');


#16 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 26 Январь 2012 - 10:11

Snoopy - это класс, а не библиотека функций. Вам необходимо для начала создать объект данного класса, и затем использовать его методы. К примеру:

$snoopy = new Snoopy;
$html = $snoopy->fetch("http://www.nbkr.kg");


#17 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 26 Январь 2012 - 10:16

Хм... мне кажется сейчас он начнет ругаться на ДОМ объект.

#18 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 26 Январь 2012 - 10:17

2012-01-26 07:16:02 - Task terminated
<br />
<b>Fatal error</b>: Call to a member function getElementsByTagName() on a non-object in <b>C:\Program Files\MSTL\


#19 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 26 Январь 2012 - 10:26

$snoopy = new Snoopy;
$snoopy->fetch("http://www.nbkr.kg");
$html = $snoopy->results;
т.е. у вас была двойная ошибка, не сразу обратил внимание.

#20 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 26 Январь 2012 - 10:36

2012-01-26 07:35:02 - <br />
<b>Warning</b>: DOMDocument::loadHTML() [<a href='domdocument.loadhtml'>domdocument.loadhtml</a>]: htmlParseEntityRef: expecting ';' in Entity, line: 99 in <b>C:\Program Files\MSTL\
:) все пропало!





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных