Мне нужно спарсить котировку с другого сайта, это получилось. С этой цифрой мне нужно совершить арифметические действия - это не получается Видимо $content воспринимается как текст или как ноль и любое действие с этой переменной выдаёт ноль. Вся арифметика в конце кода. Помогите пожалуйста. В php третий день PHP: <?php $cache_lifetime = 3600; $cache_file = "cache/kurs.html"; $cache_content = false; if ( file_exists($cache_file) ) { $cache_modified = time() - @filemtime($cache_file); if ( $cache_modified < $cache_lifetime ) { $cache_content = file_get_contents($cache_file); } } $content = file_get_contents('https://zoloto-md.ru/quotes-online'); $pos = strpos($content, '<span class="quote-down quote_xau_rur">'); $content = substr($content, $pos); $pos = strpos($content, '</span>'); $content = substr($content, 0, $pos); if ( $cache_content === false ) { ob_start(); $cache_content = $content; ob_end_clean(); $fp = @fopen($cache_file, "w"); if ( $fp ) { @fwrite($fp, $cache_content); @fclose($fp); } } $rub = (int)$content; $_999 = ($rub/33.1); $_958 = ( $_999*0.958 ); $_750 = ( $_999*0.75 ); $_585 = ( $_999*0.585 ); $_375 = ( $_999*0.375 ); ?> <p> <?php echo $content; ?> </p> <p> <?php echo $rub; ?> </p> <p> <?php echo $_999; ?> </p> <p> <?php echo $_958; ?> </p> <p> <?php echo $_750; ?> </p> <p> <?php echo $_585; ?> </p> <p> <?php echo $_375; ?> </p>
Это вывод спарсинной котировки с сайта донора. Дальше мне нужно разделить или умножить эту цифру Вот можно упростить задачу: PHP: <?php $content = file_get_contents('https://zoloto-md.ru/quotes-online'); $pos = strpos($content, '<span class="quote-down quote_xau_rur">'); $content = substr($content, $pos); $pos = strpos($content, '</span>'); $content = substr($content, 0, $pos); $rub = (int)$content; $_999 = ($rub/33.1); ?> <p> <?php echo $content; ?> </p> <p> <?php echo $_999; ?> </p> Мне выдаёт: Код (Text): [цифра] - спарсинная котировка с сайта донора 0 Почему котировка при делении выдаёт ноль? Так же как и при других арифметических действиях
@the_h врете: PHP: $content = '86664.7539'; $rub = (int)$content; $_999 = ($rub/33.1); echo $_999; //2618.247734139 так что у вас тут? PHP: <?php echo $content; ?> --- Добавлено --- ладно, так можно до бесконечно, у вас в $content: HTML: <span class="quote-down quote_xau_rur">86671.6063</span>
$content - постоянно меняющаяся цифра с сайта донора мне нужно разделить $content на 33,1 Я пробовал по разному PHP: $rub = ($content/33,1); echo $rub // выдает 0 $rub = (int)$content; $_999 = ($rub/33.1); echo $_999 // выдает 0 $rub = (int)$content; $num331 = '33.1'; $_999 = ($rub/$num331); echo $_999 // выдает 0 Как мне $content разделить или умножить на что-нибудь? Может проблема в том, что все цифры не целые, а с запятой?
Я чёта не пойму, что преследуется в попытке получить целое число из вещественного, представленного в виде строки? Ноль, он и в Африке ноль. $rub = floatval($content); Не? --- Добавлено --- Или, коль нужно именно целое: $rub = ceil($content); $rub = floor($content); --- Добавлено --- PHP: define('DEG_TO_RAD', 0.017453292519943295769236907684886); define('EARTH_R_IN_M', 6372797.560856); function distLatLon($lat1, $lon1, $lat2, $lon2) { $latArc = ($lat1 - $lat2) * DEG_TO_RAD; $lonArc = ($lon1 - $lon2) * DEG_TO_RAD; $latH = pow(sin($latArc * 0.5), 2); $lonH = pow(sin($lonArc * 0.5), 2); $tmp = cos($lat1 * DEG_TO_RAD) * cos($lat2 * DEG_TO_RAD); return ceil(EARTH_R_IN_M * 2 * asin(sqrt($latH + $tmp * $lonH))); } Вот где весело)
PHP: $rub = floatval($content); $_999 = $rub/33.1; $_998 = $rub+50; <p> <?php echo $content; ?> </p> <p> <?php echo $rub; ?> </p> <p> <?php echo $_999; ?> </p> <p> <?php echo $_998; ?> </p> Ответ: Код (Text): 86612.2950 0 0 50 PHP: $rub = ceil($content); $_999 = $rub/33.1; $_998 = $rub+50; <p> <?php echo $content; ?> </p> <p> <?php echo $rub; ?> </p> <p> <?php echo $_999; ?> </p> <p> <?php echo $_998; ?> </p> Ответ: Код (Text): 86612.2950 0 0 50 Если $content не парсить, а задать вручную, то удаётся получить все действия которые мне требуются. Может быть я парсю как-то не правильно? PHP: $content = file_get_contents('https://zoloto-md.ru/quotes-online'); // страница донор $pos = strpos($content, '<span class="quote-down quote_xau_rur">'); // строчка которая идёт перед моими данными $content = substr($content, $pos); // удаляем всё, что есть моих данных $pos = strpos($content, '</span>'); // данные которые мне нужны идут до этого текста $content = substr($content, 0, $pos); // удаляем всё что идёт на страничке после моих данных // получаем одну единственную цифру // цифра не целая, формата 86605.8050 // постоянно меняется, но я хочу чтобы обновлялась раз в час
Мде, до сих пор не дошло что ли, а так дойдет: PHP: <?php $content = '<span class="quote-down quote_xau_rur">86671.6063'; $rub = floatval($content); // нолик ноль ?> Ты строку пытаешься превратить в число, так понятнее? если бы было написано так, ничего бы не изменилось в твоем коде: PHP: <?php $content = 'координаты корабля 86671.6063'; $rub = floatval($content); // нолик ноль ?>
Короче)) Держите код и учите матчасть PHP: header('Content-type: text/html; charset=utf-8'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://zoloto-md.ru/quotes-online"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $body = curl_exec($ch); curl_close($ch); define('start_part', '<span class="quote-down quote_xau_rur">'); define('end_part', '</span>'); $pos_start = strpos($body, start_part) + strlen(start_part); $pos_end = strpos($body, end_part, $pos_start); $len = $pos_end - $pos_start; $content = substr($body, $pos_start, $len); $rub = floatval($content); $_999 = $rub / 33.1; $_998 = $rub + 50; echo $content . '<br>'; echo $rub . '<br>'; echo $_999 . '<br>'; echo $_998; Результат тут: http://acso.com.ua/test/gold.php
Спасибо. Всё работает. Подскажите пожалуйста как в данном случае проще реализовать обновление котировки раз в час?
А кто этот аякс будет раз в час дергать? Крон. Многие хостеры позволяют выполнять скрипт по расписанию. Я, иногда, использую сервис на делфи, который обрабатывает основную логику и, по таймеру, дёргает нужный скрипт на пхп по урлу. --- Добавлено --- Спасибо не плескается)) Кнопка есть для этого. --- Добавлено --- Имхо, обновление можно повесить на юзеров. Хранить в бд историю котировок и время последнего обновления. Клиент зашел на сайт, проверяем время последнего обновления: меньше часа - отдаем из бд, больше - берем свежие данные, кладем в бд, отдаем клиенту. --- Добавлено --- Но, в данном случае, у вас не будет истории котировок. Если никто на сайт не заходил, то и в историю ничего добавляться не будет. Так что копайте в сторону крона. --- Добавлено --- Обратите внимание на футер - курс валют. Я это сделал на кроне.