My hosting company has disabled allow_url_fopen & allow_url_include. They recommend that I use cURL instead, then I saw this patch on simplexml
$calendar = simplexml_load_file($source); with
if (ini_get('allow_url_fopen')) {
$calendar = simplexml_load_file($source);
}
else {
$ch = curl_init($source);
curl_setopt ($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xml_raw = curl_exec($ch);
$calendar = simplexml_load_string($xml_raw); }
and it works on my hosting so I was wondering if I could use it on simplehtmldom here is the code I am using
<?php
include('simple_html_dom.php');
include ('phpQuery.php');
// Create DOM from URL
$html = file_get_html('http://www.urlhere.com/');
?>
Can i use this? If yes what changes should I make, thank you for your help
Edited above code
<?php
include('simple_html_dom.php');
include ('phpQuery.php');
if (ini_get('allow_url_fopen')) {
$html = file_get_html('http://www.weather.bm/'); }
else{ $ch = curl_init('http://www.weather.bm/');
curl_setopt ($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$src = curl_exec($ch);
$html = str_get_html($src, false);
var_dump($html); }
?>
<div id="leftwrapper">
<div id="CurrentConditions">
<h2>Current Conditions</h2>
<div id="current-content">
<div id="elementleft">
<?php
foreach($html->find('div.obElementLeft') as $e)
echo $e->outertext;
?>
</div>
<div id="elementright"><?php
foreach($html->find('div.obElementRight') as $e)
echo $e->outertext;
?>
</div></div></div>
<div id="rightwrapper">
<div id="TodayForecast">
<h2>24-Hour Forecast</h2>
<?php
foreach($html->find('.TodaysForecastContainer') as $e)
$doc = phpQuery::newDocumentHTML( $e );
$containers = pq('.TodaysForecastContainerInner', $doc);
foreach( $containers as $container ) {
$div = pq('div', $container);
$div->eq(1)->removeAttr('style')->addClass('thumbnail')->
html( pq( 'img', $div->eq(1))->removeAttr('height')->
removeAttr('width')->removeAttr('alt') );
$div->eq(0)->removeAttr('style')->addClass('day')->
html( pq( 'u', $div->eq(0) )->html() );
$div->eq(2)->removeAttr('style')->addClass('description'); }
print $doc;
?>
</div><!--end of todayforecast-->
<div id="bws-foot">Weather data provided in part by the Bermuda Weather
Service</div> <img id="bws-logo" src="images/bwslogo.jpg" />
<div id="hilo">
<p>Today's Temperature:</p>
<?php
foreach($html->find('div.HiLoContainer') as $e)
$doc = phpQuery::newDocumentHTML( $e );
$containers = pq('div.HiLoContainer', $doc);
foreach( $containers as $container ) { $div = pq('div', $container);
$div->eq(0)->removeAttr('style')->addClass('hi1');
$div->eq(1)->removeAttr('style')->addClass('lo1');
} print $doc;
?>
Outlook
find('.SynopsisContainer span') as $e) echo $e->innertext . '
'; ?>4 Day Weather Forecast
foreach($html->find('.FourDayForecastContainer') as $e)
$doc = phpQuery::newDocumentHTML( $e );
$containers = pq ('.FourDayForecastContainerInner', $doc); foreach( $containers as $container ) { $div = pq('span', $container); $img = pq('img', $container); $div->eq(0开发者_开发技巧)->removeAttr('style')->addClass('day')-> html( pq( 'u', $div->eq(0) )->html() );$img->eq(0)->removeAttr('style')->removeAttr('height')-> removeAttr('width')->removeAttr('alt')->addClass('thumbnail')-> html( pq( 'img', $img->eq(0)) );$imghtml = pq('a', $container)-> html(); pq($container)->prepend($imghtml); pq('a', $container)->remove();
$div->eq(1)->removeAttr('style')->addClass('hi'); $div->eq(3)->removeAttr('style')->addClass('lo'); $div->eq(5)->removeAttr('style')->addClass('description'); } print $doc; ?>You'd need to edit the simple_html_dom source. Its easier to just create your own function that does what the original does. The original (which you can't use because of allow_url_fopen) is:
function file_get_html() {
$dom = new simple_html_dom;
$args = func_get_args();
@$dom->load(call_user_func_array('file_get_contents', $args), true);
if (($error=error_get_last())!==null)
throw new Exception($error['message']);
return $dom;
}
You can just do this:
if (ini_get('allow_url_fopen')) {
$html = file_get_html('http://www.urlhere.com/');
}else{
$ch = curl_init('http://www.urlhere.com/');
curl_setopt ($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$src = curl_exec($ch);
$html = str_get_html($src, false);
}
No need to modify the source, and effectively does the same thing.
Another option would be to use the data://
stream wrapper that will allow you to use the file_get_html()
function without altering it.
if (!ini_get('allow_url_fopen')) {
$ch = curl_init($source);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xml_raw = curl_exec($ch);
curl_close($ch);
$source = 'data://text/html;base64,'.base64_encode($xml_raw);
}
$html = file_get_html($source);
This approach uses the RFC 2397 data URL scheme which is supported in PHP 5.2.0 and later.
精彩评论