Генерация файла при помощи cron

Главные вкладки

Аватар пользователя Quty Quty 27 ноября 2014 в 1:10

Здравствуйте.
Стоит задача создать на сервере файл с расширением .js
Содержание файла javascript должно формироваться на основе некоторых данных из PHP.
Примерно как-то так:

var value = <?php print $phpvalue; ?> ;
alert(value);

Есть определённое значение, которое можно получить только при помощи PHP и оно меняется каждый сутки. Как курс валют, к примеру. Нужно чтобы на сервере каждый день генерировался файл .js содержащий js-скрипт получающий это каждый день новое PHP значение. Чтение комментариев этой статьи http://habrahabr.ru/post/139154/ подсказало, что можно генерировать файл кроном. Но подскажите, пожалуйста, как именно это происходит. Опыта работы с крон ноль. Не могли бы привести пример создания файла кроном?

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

PS: Способы описанные в теле самой статьи (http://habrahabr.ru/post/139154/) не подходят. PHP значение берётся с одного сайта, а JS файл будет встраиваться в другие сайты (без поддержки PHP).

Заранее благодарю всех за любую помощь и наводки.

Комментарии

Аватар пользователя unome unome 27 ноября 2014 в 5:22

А почему не сделать статичный js, который за обновляемыми данными будет обращаться к серверу, где php будет отдавать их в json формате например?

Аватар пользователя Orion76 Orion76 27 ноября 2014 в 8:41

Да.. подход, конечно, интересный..
Даю на водку : Карта сайта, sitemap, xml sitemap

Можно еще посмотреть, как реализована агрегация JS в самом Drupal.

Аватар пользователя Quty Quty 28 ноября 2014 в 16:19

Для моей задачи действительно оказалось куда проще использовать json чем разбираться с cron.
Никогда ранее не работал с json - поэтому и не рассматривал его, как возможный вариант.

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

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

Остальным, попытавшимся помочь с моей задачей именно так, как я её описал - тоже большое спасибо!

Аватар пользователя Quty Quty 28 ноября 2014 в 16:22

Хватить начал раньше времени ))
Подход с json не работает. Скрипт PHP отдающий на значение и скрипт JS принимающий значение на сайте 1, а вот сам скрипт JS планируется использовать на сайте 2. Встраивание скрипта в сайт 2 не позволяет получать то нужно значение путём запроса к php скрипту (разные домены и всё такое).

PS: сайт 2 не поддерживает PHP, чтобы самостоятельно запросить PHP значение с того сайта. Потому и нужна вся эта история.

Аватар пользователя Orion76 Orion76 28 ноября 2014 в 17:00

Схемку что ли нарисуйте.. очень плохо понятно что нужно..
Такое ощущение, что есть до ужаса простое решение - но конечная цель почти не понятна.-)

Аватар пользователя Quty Quty 28 ноября 2014 в 17:17

1. Есть сайт 1. Он генерирует определённое PHP значение переменной. Значение каждые сутки обновляется.
2. Есть сайт 2. На нём нужно использовать значения с сайта 1. Этот сайт не поддерживает PHP.

Текущее решение, которое почти доделал:
На сайте 1:
- создал пустой файл JS
- создал файл php, который через fopen() прописывает в JS файл JS-функцию, которая возвращает это самое значение (в JS функцию подставляется PHP переменная).
- файл php помещу в крон с обновлением раз в сутки.

На сайте 2 (и на любом другом):
- подключаем JS файл с сайта 1 и выполняем функцию.

Таким образом я смогу подключать файл JS к любым сайтам без поддержки PHP и использовать это значение с сайта 1, так как оно будет каждый день актуальное в самом JS файле, а не пытаться получить его запросом по JSON во время исполнения скрипта (что невозможно из за политики разных доменов).

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

Аватар пользователя unome unome 29 ноября 2014 в 9:42

Не стоит списывать json

// ----- Drupal

function quty_menu() {
  $items['quty'] = array(
    'page callback' => 'quty_callback',
    'type' => MENU_CALLBACK,
    'access callback' => TRUE,
  );
  return $items;
}

function quty_callback() {
  $data = array('date' => format_date(REQUEST_TIME));
  drupal_add_http_header('Access-Control-Allow-Origin', '*');
  drupal_json_output($data);
}

// ----- JS
$.get("http://example.com/quty", function(data) { console.log(data); });

Внимание на "Access-Control-Allow-Origin", это будет работать в современных браузерах. Нужно чтобы работало в старых - используйте jsonp. А можно и целиком ваш js файл генерировать влет, ни каких ограничений на использование js с других доменов нет.