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

27 ноября 2014 в 1:10
Аватар пользователя Quty Quty 0 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).

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

Комментарии

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

27 ноября 2014 в 5:22

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

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

27 ноября 2014 в 8:41

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

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

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

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

28 ноября 2014 в 16:19

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

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

28 ноября 2014 в 16:22

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

28 ноября 2014 в 17:00

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

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

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

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

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

28 ноября 2014 в 17:17

Не стоит списывать 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 с других доменов нет.

29 ноября 2014 в 9:42