Я использую file_get_contents
, чтобы получить удаленное ценообразование (обновляется ежедневно), используйте substr
, чтобы оставить только те части, которые мне нужны (вырезать символы валюты и другие данные из выходных данных и сохранить только цифры), и использовать file_put_contents
, чтобы сохранить его в каталоге кеша, о котором я расскажу позже.
Вот что у меня сейчас: -
<?php
$cacheDirectory = $_SERVER['DOCUMENT_ROOT'] . '/cache/';
// Small Plan - US
$cachefile_SM_US = $cacheDirectory . 'SM_US.cache';
if(file_exists($cachefile_SM_US)) {
if(time() - filemtime($cachefile_SM_US) > 1600) {
// too old , re-fetch
$cache_SM_US = file_get_contents('https://remotedomain.com/?get=price&product=10¤cy=1');
$substr_SM_US = substr($cache_SM_US,17,2);
file_put_contents($cachefile_SM_US, $substr_SM_US);
} else {
// cache is still fresh
}
} else {
// no cache, create one
$cache_SM_US = file_get_contents('https://remotedomain.com/?get=price&product=10¤cy=1');
$substr_SM_US = substr($cache_SM_US,17,2);
file_put_contents($cachefile_SM_US, $substr_SM_US);
}
// Large Plan - US
$cachefile_LG_US = $cacheDirectory . 'LG_US.cache';
if(file_exists($cachefile_LG_US)) {
if(time() - filemtime($cachefile_LG_US) > 1600) {
// too old , re-fetch
$cache_LG_US = file_get_contents('https://remotedomain.com/?get=price&product=20¤cy=1');
$substr_LG_US = substr($cache_LG_US,17,2);
file_put_contents($cachefile_LG_US, $substr_LG_US);
} else {
// cache is still fresh
}
} else {
// no cache, create one
$cache_LG_US = file_get_contents('https://remotedomain.com/?get=price&product=20¤cy=1');
$substr_LG_US = substr($cache_LG_US,17,2);
file_put_contents($cachefile_LG_US, $substr_LG_US);
}
// Small Plan - EU
$cachefile_SM_EU = $cacheDirectory . 'SM_EU.cache';
if(file_exists($cachefile_SM_EU)) {
if(time() - filemtime($cachefile_SM_EU) > 1600) {
// too old , re-fetch
$cache_SM_EU = file_get_contents('https://remotedomain.com/?get=price&product=10¤cy=2');
$substr_SM_EU = substr($cache_SM_EU,17,2);
file_put_contents($cachefile_SM_EU, $substr_SM_EU);
} else {
// cache is still fresh
}
} else {
// no cache, create one
$cache_SM_EU = file_get_contents('https://remotedomain.com/?get=price&product=10¤cy=2');
$substr_SM_EU = substr($cache_SM_EU,17,2);
file_put_contents($cachefile_SM_EU, $substr_SM_EU);
}
// Large Plan - EU
$cachefile_LG_EU = $cacheDirectory . 'LG_EU.cache';
if(file_exists($cachefile_LG_EU)) {
if(time() - filemtime($cachefile_LG_EU) > 1600) {
// too old , re-fetch
$cache_LG_EU = file_get_contents('https://remotedomain.com/?get=price&product=20¤cy=2');
$substr_LG_EU = substr($cache_LG_EU,17,2);
file_put_contents($cachefile_LG_EU, $substr_LG_EU);
} else {
// cache is still fresh
}
} else {
// no cache, create one
$cache_LG_EU = file_get_contents('https://remotedomain.com/?get=price&product=20¤cy=2');
$substr_LG_EU = substr($cache_LG_EU,17,2);
file_put_contents($cachefile_LG_EU, $substr_LG_EU);
}
?>
Этот ручной способ работает, когда есть только два продукта (10
и 20
) и две валюты (1
и 2
) поскольку мне нужно сделать это только 4 раза, чтобы получить все необходимые мне цены.
Однако я собираюсь значительно расширить количество продуктов по крайней мере до 12 продуктов и 9 валют, поэтому нереально c делать их вручную.
Я считаю, что это можно сделать более эффективно с помощью PHP foreach l oop, но я пробовал несколько дней, но мне не удалось заставить его работать, возможно, из-за моего более слабого понимания концепции.
Мне удалось разделить это на следующее: -
<?php
$cacheDirectory = $_SERVER['DOCUMENT_ROOT'] . '/cache/';
$url = 'https://remotedomain.com/?get=price';
$productA = 10;
$productB = 20;
$USD = 1;
$EUR = 2;
// Small Plan - US
$cachefile_SM_US = $cacheDirectory . 'SM_US.cache';
if(file_exists($cachefile_SM_US)) {
if(time() - filemtime($cachefile_SM_US) > 1600) {
// too old , re-fetch
$cache_SM_US = file_get_contents($url . '&product=' . $productA . '¤cy=' . $USD);
$substr_SM_US = substr($cache_SM_US,17,2);
file_put_contents($cachefile_SM_US, $substr_SM_US);
} else {
// cache is still fresh
}
} else {
// no cache, create one
$cache_SM_US = file_get_contents($url . '&product=' . $productA . '¤cy=' . $USD);
$substr_SM_US = substr($cache_SM_US,17,2);
file_put_contents($cachefile_SM_US, $substr_SM_US);
}
// Large Plan - US
$cachefile_LG_US = $cacheDirectory . 'LG_US.cache';
if(file_exists($cachefile_LG_US)) {
if(time() - filemtime($cachefile_LG_US) > 1600) {
// too old , re-fetch
$cache_LG_US = file_get_contents($url . '&product=' . $productB . '¤cy=' . $USD);
$substr_LG_US = substr($cache_LG_US,17,2);
file_put_contents($cachefile_LG_US, $substr_LG_US);
} else {
// cache is still fresh
}
} else {
// no cache, create one
$cache_LG_US = file_get_contents($url . '&product=' . $productB . '¤cy=' . $USD);
$substr_LG_US = substr($cache_LG_US,17,2);
file_put_contents($cachefile_LG_US, $substr_LG_US);
}
// Small Plan - EU
$cachefile_SM_EU = $cacheDirectory . 'SM_EU.cache';
if(file_exists($cachefile_SM_EU)) {
if(time() - filemtime($cachefile_SM_EU) > 1600) {
// too old , re-fetch
$cache_SM_EU = file_get_contents($url . '&product=' . $productA . '¤cy=' . $EUR);
$substr_SM_EU = substr($cache_SM_EU,17,2);
file_put_contents($cachefile_SM_EU, $substr_SM_EU);
} else {
// cache is still fresh
}
} else {
// no cache, create one
$cache_SM_EU = file_get_contents($url . '&product=' . $productA . '¤cy=' . $EUR);
$substr_SM_EU = substr($cache_SM_EU,17,2);
file_put_contents($cachefile_SM_EU, $substr_SM_EU);
}
// Large Plan - EU
$cachefile_LG_EU = $cacheDirectory . 'LG_EU.cache';
if(file_exists($cachefile_LG_EU)) {
if(time() - filemtime($cachefile_LG_EU) > 1600) {
// too old , re-fetch
$cache_LG_EU = file_get_contents($url . '&product=' . $productB . '¤cy=' . $EUR);
$substr_LG_EU = substr($cache_LG_EU,17,2);
file_put_contents($cachefile_LG_EU, $substr_LG_EU);
} else {
// cache is still fresh
}
} else {
// no cache, create one
$cache_LG_EU = file_get_contents($url . '&product=' . $productB . '¤cy=' . $EUR);
$substr_LG_EU = substr($cache_LG_EU,17,2);
file_put_contents($cachefile_LG_EU, $substr_LG_EU);
}
?>
Теперь передо мной стоит задача - как превратить это в foreach l oop, который будет циклически проходить через каждый продукт и каждый валюты.
Цените указатели в правильном направлении.
Спасибо!