Форум

Data.BG Форуми: PHP код за http iframe в https уеб сайт ? - Data.BG Форуми

Прехвърляне към съдържание

Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

PHP код за http iframe в https уеб сайт ? Как да заредя iframe от незащитен сайт в сайт с активен SSL ?

#1
Потребителят е неактивен   catzarov 

  • Група: Потребители
  • Мнения: 478
  • Регистриран: 10-May 05
  • Репутация: 7
  • Пол:Мъж
  • Град:BG
Здравейте Другари.

От вчера мъча една <iframe> рамка която взима съдържание от незащитен сайт (http) и слагам този iframe код в сайт, който има защита (https).
Там съответно не се визуализира съдържанието от iframe. Същия iframe код, когато го тествам локално си работи перфектно.

Ето примерен код:

Стил на iframe рамката:
<style>
#databg-position
{
    width    : 615px;
    height   : 255px;
    overflow : hidden;
    position : relative;
}

#iframesize
{
    position : absolute;
    top      : -350px;
    left     : -180px;
    width    : 1280px;
    height   : 1200px;
}
</style>


Код на Iframe рамката:
<div id="databg-position">
<iframe src="http://www.data.bg/" id="iframesize" scrolling="no"></iframe>
</div>


Локално работи, но когато същия този код се качи в SSL защитен сайт, спира да функционира.
В нета попадан и на информация да заредя scr да започва само с // но и това не се получава.

Опитах и с мета редчето:
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

Но пак без успех.

В сайта на stackoverflow намерих примерен php код, кой по тяхното обяснение и гласувалите ще позволи вграждането на рамка от незащитен сайт в защитен.

Създавам файл redirect.php със следния код:
<?php
if (isset($_GET['url'])) {
    $url = $_GET['url'];
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    echo $data;
}
?>


След това го извиквам чрез следния html:
<div id="databg-position">
<iframe src="/redirect.php?url=http://www.data.bg/" id="iframesize" scrolling="no"></iframe>
</div>


Моля, за Вашето съдействие. Как да вградя съдържание от сайт с http в сайт с https.

Благодаря за отделеното време.

Мнението беше редактирано от catzarov: 14.03.17 - 11:51

0

#2
Потребителят е неактивен   escapeboy 

  • Група: Потребители
  • Мнения: 259
  • Регистриран: 23-July 03
  • Репутация: 0
  • Пол:Мъж
  • Град:Пловдив
Няма как да стане да го вградиш директно. Браузъра не позволява.
Това, което си намерил последното е curl, който сваля целия сайт и ще стане.
Pro варианта е да използваш DOM Parser (примерно http://simplehtmldom.sourceforge.net/). Това сваля целия сайт, пишеш код, който филтрира каквото ти е нужно и го показваш на страничката си. Или за да не го правиш всеки път когато влезе потребител (защото ще ти забави значително страницата) - може периодично да сваля информация и да я записва в базата данни. Или да генерираш някакъв html файл, който после да зареждаш.
0

#3
Потребителят е неактивен   catzarov 

  • Група: Потребители
  • Мнения: 478
  • Регистриран: 10-May 05
  • Репутация: 7
  • Пол:Мъж
  • Град:BG
По спомен, когато се опитам да вкарам съдържанието от незащитен сайт, се махаше ssl и вече в браузъра на хром не изписва, че сайта е защитен.
Ще се запозная с информацията от линка, който ми даде, дано да ми свърши работа защото е полезен метод, ако проработи, ще мога да извличам всякакво съдържание от други сайтове и да го визуализирам при мен.

Не съм обаче запознат с това което си написал за това да не се извлича инфромация при всеки посетител, а някак си да я кешира за два часа, след това да кешира отново, но нз как се прави това нещо в php, ако имаш някакув готов код моля, пусни да го разгледам, ще ми бъде много полезен.
0

#4
Потребителят е неактивен   escapeboy 

  • Група: Потребители
  • Мнения: 259
  • Регистриран: 23-July 03
  • Репутация: 0
  • Пол:Мъж
  • Град:Пловдив
трябва ти cron, който да изпълнява php файла който ще прави каквото му кажеш.
Когато научиш това с DOM Parser-a напиши си php файл, който да сваля инфото от сайта и да го записва в база данни (или да създава html файл).
Правиш cron задача, която да вика на всеки 2 часа този файл и той ще обновява информацията. След което ще я показваш както решиш. Това е един вид кеширане ако нямаш нещо друго под ръка.
Това, което казваш за махането на https от адреса става ако сайта поддържа и http, и https без да редиректва. Ако е бг сайт, най-вероятно редиректва.
Алтернативата е да си сложиш и ти https (което е желателно в момента), но iframe-а като цяло е лоша идея, а и DOM parser-a е много яко нещо ;) Довери ми се - заслужава си да го знаеш.
0

#5
Потребителят е неактивен   catzarov 

  • Група: Потребители
  • Мнения: 478
  • Регистриран: 10-May 05
  • Репутация: 7
  • Пол:Мъж
  • Град:BG
Здравейте :) измина малко време но макар топика на първия пост да няма общо с коментара ми сега, искам да споделя "наготово" информацията която ми даде @escapeboy, макар че в примерните кодове които ще покажа по-долу не използвам "DOM Parser" методът за локално кеширане на чужда информация работи успешно... пу-пу :P

Ще дам кратък пример, как аз успях да покажа в сайта си ВАЛУТЕ КУРС НА БНБ ЗА ДНЕС чрез готово работещ php код и cron job задача.

Създадох файл с име cron.php и съдържание:

<?php
$result = file_get_contents('http://www.pariteni.bg/');
$ret = file_put_contents('bnb.html', $result, FILE_APPEND | LOCK_EX);

if($ret === false) {
	die('There was an error writing this file');
}

// echo $result;
echo "Cron job is Run\n\r bnb.html is made\n\r in local dir";
?>


Този файл го заредих в хостинга с cron задача да се актуализира двапъти дневно и да създава локален файл, който да бъде копие на сайта от реда в кофа $result и по този начичин успях да запазя активноста на моя SSL.

Cron Job задачаката ми изглежда така:
0 0,12 * * * /usr/local/bin/php /home/cPanelUser/directory/domain/url/fail/cron.php

Тук е хитрия момент, как да извлека от локалното копие само bnb валутния курс :)
За целта използвам друг php файл widget.php и съдържание на файла:

<?php
$url = 'bnb.html';
$content = file_get_contents($url);
$first_step = explode( '<div class="currenciesContent clearfix">' , $content );
$second_step = explode("</div>" , $first_step[1] );

echo $second_step[0];
?>


Така вече имам url линк, който отваря само валутния курс на бнб без излишната информация, която за мен е ненужна в локалния файл bnb.html и запазва в адрес бара на браузъра, че сайта е защитен :)

Като последна стъпка, е нужно просто да се добави съдържанието на този файл във сайта, където желаете да покаже фиксинга на бнб.
Аз използвам php код за include
<?php include '/directory/domain/url/fail/widget.php'; ?>

и като резълтат... хип-хип ура :)
Публикувано изображение
Дано екранната снимка да работи ;) и дано да бъде полезна тази информация и на другиму изпаднал в нужда.

Благодаря на escapeboy за трохичката знание, което ще ми бъде полезно в бъдеще.
0

#6
Потребителят е неактивен   escapeboy 

  • Група: Потребители
  • Мнения: 259
  • Регистриран: 23-July 03
  • Репутация: 0
  • Пол:Мъж
  • Град:Пловдив
Добре си се справил :) Браво! :)
Лошото на парсването на html-а е че ако го сменят гориш.
Може за БНБ да разгледаш това: http://www.bnb.bg/St...search=&lang=BG
Някога съм правил нещо такова:
$xml = simplexml_load_file('http://www.bnb.bg/Statistics/StExternalSector/
StExchangeRates/StERForeignCurrencies/index.htm?download=xml&
search=&lang=BG');

            foreach($xml->ROW as $row){
                if($row->GOLD==0) continue;
                unset($opt);
                switch($row->CODE){
                    case 'USD':
                        $opt = \App\Models\Settings::firstOrCreate(['
option_key' => 'BGN_USD']);
                        break;
                    case 'RUB':
                        $opt = \App\Models\Settings::firstOrCreate(['
option_key' => 'BGN_RUB']);
                        break;
                    case 'JPY':
                        $opt = \App\Models\Settings::firstOrCreate(['
option_key' => 'BGN_JPY']);
                        break;
                    case 'GBP':
                        $opt = \App\Models\Settings::firstOrCreate(['
option_key' => 'BGN_GBP']);
                        break;
                    case 'CHF':
                        $opt = \App\Models\Settings::firstOrCreate(['
option_key' => 'BGN_CHF']);
                        break;
                    default:
                        continue;
                        break;
                }
                if(isset($opt)){
                    $opt->value = json_encode([
                        'ratio' => (int)$row->RATIO,
                        'rate' => (float)$row->RATE,
                        'reverse' => (float)$row->REVERSERATE,
                        'date' => (string)$row->CURR_DATE,
                        'last_update' => date('d.m.Y H:i')
                    ]);
                    $opt->save();
                }
            }

0

Споделете тази тема чрез:


Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

1 потребители четат тази тема
0 регистрирани потребители, 1 гости и 0 анонимни потребители


Data.BG e форум за дискусии. Data.BG не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Data.BG.

Close  Member Login