enva Skrevet 22. desember 2010 Del Skrevet 22. desember 2010 (endret) Hei, Har nettopp byttet domene og server-leverandør fra FastName til GoLarge. Før jeg avbestilte hos fastname lastet jeg ned alt fra serveren slik at jeg kunne laste det opp igjen på den nye serveren hos GoLarge. Har som jeg alltid har hatt, en vanlig Linux-server. Men nå ser det ut som alle PHP-script jeg hadde på siden min ikke fungerer. Om du går inn på http://trondheimlufthavn.net/index.php så ser du fort at været på venstresiden og at flytidene ikke fungerer. Jeg skjønner ingenting. Alt av navn på filer, mapper osv er det samme som det var før jeg byttet. Noen som vet hva problemet er? Endret 22. desember 2010 av enva Lenke til kommentar
LaStrada Skrevet 22. desember 2010 Del Skrevet 22. desember 2010 Prøvd å google feilmeldingen? Lenke til kommentar
Thomas. Skrevet 23. desember 2010 Del Skrevet 23. desember 2010 (endret) Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: URL file-access is disabled in the server configuration in /home/trond97/public_html/class.avinor.php on line 306 Warning: SimpleXMLElement::__construct(http://flydata.avinor.no/airlineNames.asp) [simplexmlelement.--construct]: failed to open stream: no suitable wrapper could be found in /home/trond97/public_html/class.avinor.php on line 306 Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: I/O warning : failed to load external entity "http://flydata.avinor.no/airlineNames.asp" in /home/trond97/public_html/class.avinor.php on line 306 Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /home/trond97/public_html/class.avinor.php:306 Stack trace: #0 /home/trond97/public_html/class.avinor.php(306): SimpleXMLElement->__construct('http://flydata....', 0, true) #1 /home/trond97/public_html/class.avinor.php(63): avinor->fetchAirlineNames() #2 /home/trond97/public_html/flytider1.php(18): avinor->__construct() #3 {main} thrown in /home/trond97/public_html/class.avinor.php on line 30 Feilmeldingene dine Som den ene sier, URL file-access is disabled in the server configuration. Da må du prøve fikse det Edit: Så at du også har samme problem med været. Hva bruker du til og åpne URL'er? file_get_contents? Isåfall, sjekk om denne funksjonen er aktivert i php.ini. Endret 23. desember 2010 av Thomas. Lenke til kommentar
enva Skrevet 23. desember 2010 Forfatter Del Skrevet 23. desember 2010 (endret) Bruker file_get_contents ja. (trur jeg ) Det er en stund siden jeg har knotet med disse php-kodene mine, så jeg er litt "rusty". Jeg bruker GoLarge. Vet du hvor jeg finner denne php.ini.-saken? Og er det her jeg endre url file-Access? Her er class.avinor.php: <?php /** * Avinor PHP API Library * @version 1.1 * @author Flamur Mavraj - OXODesign TEAM * @link http://www.oxodesign.no/avinorPhpApi * @name avinor * @license Domain Public */ class avinor{ private $timeFrom; private $timeTo; private $airport; private $direction; private $lastUpdate; private $apiRequestUri = ""; protected $apiUrlFlights = "http://flydata.avinor.no/XmlFeed.asp?"; protected $apiUrlFlightStatus = "http://flydata.avinor.no/flightStatuses.asp"; protected $apiUrlAirportNames = "http://flydata.avinor.no/airportNames.asp"; protected $apiUrlAirlineNames = "http://flydata.avinor.no/airlineNames.asp"; public $statusCodes = array(); public $airlineNames= array( /** * Avinor does not have thoose airline codes * on their airline search api, so we created manually. */ 'EZ' => array('code' => 'EZ', 'name' => 'Krohn Air'), 'HTA' => array('code' => 'HTA', 'name' => 'Helitrans'), '9I' => array('code' => '9I', 'name' => 'Vildanden'), 'XQ' => array('code' => 'XQ', 'name' => 'Sun Express'), 'CAI' => array('code' => 'CAI', 'name' => 'Corendon'), 'AKY' => array('code' => 'AKY', 'name' => 'Yak Service', 'icon' => 'gfx/icons/AKY.png'), 'CGI' => array('code' => 'CGI', 'name' => 'Rusair', 'icon' => 'gfx/icons/CGI.png'), 'IJM' => array('code' => 'IJM', 'name' => 'Intl. Air M.', 'icon' => 'gfx/icons/IJM.png'), '2N' => array('code' => '2N', 'name' => 'NextJet', 'icon' => 'gfx/icons/2N.png'), 'FHY' => array('code' => 'FHY', 'name' => 'Freebird', 'icon' => 'gfx/icons/FHY.png'), 'BGH' => array('code' => 'BGH', 'name' => 'Balkan', 'icon' => 'gfx/icons/BGH.png'), 'YK' => array('code' => 'YK', 'name' => 'Cyprus Turkish'), 'MSC'=> array('code' => 'MSC', 'name' => 'Air Cairo') ); public $airlineIconPath = "gfx/icons"; // For Windows use "gfx\icons" public $airlineIcons = array(); public $airportNames= array( 'SVO'=> array('code' => 'SVO', 'name' => 'Moskva'), 'LHE'=> array('code' => 'LHE', 'name' => 'Lahore') ); public $flights = array(); public function __construct() { /** * Fetch airline icons from a directory * Fetch airline names into an array * Fetch airport names into an array * Fetch flight status codes into an array */ $this->fetchAirlineIcons() ->fetchAirlineNames() ->fetchAirportNames() ->fetchFlightStatusCodes(); return true; } /** * Clear session cache * @param $name|null * @return avinor */ public function clearCache($name = null){ if($name === null) unset($_SESSION['cache']); else unset($_SESSION['cache'][$name]); return $this; } /** * Return airport * @return string */ public function getAirport(){ return $this->airport; } /** * Return current airport * @return array */ public function getCurrentAirport(){ return $this->airportNames[$this->airport]; } /** * Return array of airport names * @return array */ public function getAirportList(){ return $this->airportNames; } /** * Define value for timeFrom * @param int $time * @return avinor */ public function setTimeFrom($time){ $this->timeFrom = (int) $time; return $this; } /** * Define value for timeTo * @param int $time * @return avinor */ public function setTimeTo($time){ $this->timeTo = (int) $time; return $this; } /** * Define airport * @param string $airport * @return avinor */ public function setAirport($airport){ $this->airport = $airport; return $this; } /** * Define direction * @param string $direction * @return avinor */ public function setDirection($direction){ $this->direction = $direction; return $this; } /** * Define lastUpdate * @param string $lastUpdate * @return avinor */ public function setLastUpdate($lastUpdate){ $this->lastUpdate = $lastUpdate; return $this; } /** * Build flight request query * @return avinor */ private function buildRequestQuery(){ $this->apiRequestUri = $this->apiUrlFlights; $this->apiRequestUri.= (isset($this->airport) ? 'airport=' . urlencode($this->airport) : ''); $this->apiRequestUri.= (isset($this->timeTo) ? '&timeTo=' . urlencode($this->timeTo) : ''); $this->apiRequestUri.= (isset($this->timeFrom) ? '&timeFrom=' . urlencode($this->timeFrom) : ''); $this->apiRequestUri.= (isset($this->direction) ? '&direction=' . urlencode($this->direction) : ''); $this->apiRequestUri.= (isset($this->lastUpdate) ? '&lastUpdate=' . urlencode($this->lastUpdate) : ''); return $this; } /** * Get result of request. * It returns the result or boolean if something goes wrong * @return array/boolean */ public function getResult(){ try{ // Check if airport is set, if not throw an exception if(!isset($this->airport)) throw new Exception('Airport is not defined!'); // Build flight request query $this->buildRequestQuery(); // Get xml from the server $xml = new SimpleXMLElement($this->apiRequestUri, null, true); // Parse the XML output foreach($xml->flights->flight as $flight){ // Create an array with the name of the airports the plane has been through $viaAirport = null; if(isset($flight->via_airport)){ $viaAirport = array(); $viaAirports = explode(",", (string) $flight->via_airport); foreach($viaAirports as $via){ $viaAirport[] = $this->airportNames[(string) $via]; } } $this->flights[(string) $flight['uniqueID']] = array( 'airport' => $this->airportNames[(string)$flight->airport], 'flightId' => (string) $flight->flight_id, 'airline' => (isset($this->airlineNames[(string) $flight->airline]) ? $this->airlineNames[(string) $flight->airline] : array('code' => (string) $flight->airline, 'name' => (string) $flight->airline) ), 'domInt' => (string) $flight->dom_int, 'scheduleTime' => (string) $flight->schedule_time, 'direction' => (string) $flight->arr_dep, 'viaAirport' => $viaAirport, 'checkIn' => (isset($flight->check_in) ? (string) $flight->check_in : null), 'gate' => (isset($flight->gate) ? (string) $flight->gate : null), 'status' => (isset($flight->status) ? array( 'code' => $this->statusCodes[(string) $flight->status['code']], 'time' => (string) $flight->status['time'] ) : null ), 'beltNumber' => (isset($flight->belt_number) ? (string) $flight->belt_number : null) ); } }catch (Exception $e){ echo "Error: " . $e->getMessage(); return false; } return $this->flights; } /** * Fetch airline icons from a directory * @return avinor */ private function fetchAirlineIcons(){ if(isset($_SESSION['cache']['airlineIcons'])){ $this->airlineIcons = unserialize($_SESSION['cache']['airlineIcons']); return $this; } try{ $files = new DirectoryIterator($this->airlineIconPath); }catch (Exception $e){ echo "<font style='color: #ff0000'> Error: Failed to open airlineIconPath: <b>" . $this->airlineIconPath . "</b></font>"; return $this; } foreach($files as $file){ if(!$file->isDot()){ $fileInfo = pathinfo($file->getFilename()); $this->airlineIcons[strtolower((string)$fileInfo['filename'])] = str_replace("\\", "/", (string) $file->getPathname()); } } $_SESSION['cache']['airlineIcons'] = serialize($this->airlineIcons); return $this; } /** * Fetch flight status codes into an array * @return avinor */ private function fetchFlightStatusCodes(){ if(isset($_SESSION['cache']['statusCodes'])){ $this->statusCodes = unserialize($_SESSION['cache']['statusCodes']); return $this; } $xml = new SimpleXMLElement($this->apiUrlFlightStatus, null, true); foreach($xml->flightStatus as $status){ $this->statusCodes[(string) $status["code"]] = array( 'code' => (string) $status["code"], 'no' => (string) $status['statusTextNo'], 'en' => (string) $status['statusTextEn'] ); } $_SESSION['cache']['statusCodes'] = serialize($this->statusCodes); return $this; } /** * Fetch airline names into an array * @return avinor */ private function fetchAirlineNames(){ if(isset($_SESSION['cache']['airlineNames'])){ $this->airlineNames = unserialize($_SESSION['cache']['airlineNames']); return $this; } $xml = new SimpleXMLElement($this->apiUrlAirlineNames, null, true); foreach($xml->airlineName as $airline){ $this->airlineNames[(string) $airline["code"]] = array( 'code' => (string) $airline["code"], 'name' => (string) $airline["name"], 'icon' => ( isset($this->airlineIcons[strtolower((string) $airline["code"])]) ? $this->airlineIcons[strtolower((string)$airline["code"])] : false) ); } $_SESSION['cache']['airlineNames'] = serialize($this->airlineNames); return $this; } /** * Fetch airport names into an array * @return avinor */ private function fetchAirportNames(){ if(isset($_SESSION['cache']['airportNames'])){ $this->airportNames = unserialize($_SESSION['cache']['airportNames']); return $this; } $xml = new SimpleXMLElement($this->apiUrlAirportNames, null, true); foreach($xml->airportName as $airport){ $this->airportNames[(string) $airport["code"]] = array( 'code' => (string) $airport["code"], 'name' => (string) $airport["name"] ); } $_SESSION['cache']['airportNames'] = serialize($this->airportNames); return $this; } } Her er flytid-php'n: <?php include 'class.avinor.php'; ?> </p> <div class="pageDemo"> <h1 class="bold"> <?php $avinor = new avinor(); $timeNow = time(); if(isset($_POST) && isset($_POST['btnSearch'])){ $airport = $_POST['airport']; $timeFrom = $_POST['timeFrom']; $timeTo = $_POST['timeTo']; $direction = $_POST['direction']; }else{ $airport = "TRD"; $timeFrom = 0; $timeTo = 24; $direction = "0"; } $directions = array( '0' => 'Begge retninger', 'A' => 'Ankomster', 'D' => 'Avganger' ); ?> </h1> <div> <form action="#" method="post" name="doSearchFlight" class="postmeta" id="doSearchFlight"> <select name="airport"> <option value="TRD">Trondheim TRD</option> </select> <label> </label> <select name="direction"> <?php foreach($directions as $dirValue => $dirMsg):?> <option value="<?php echo $dirValue; ?>" <?php echo ($dirValue == $direction ? 'SELECTED' : ''); ?>><?php echo $dirMsg; ?></option> <?php endforeach; ?> </select> <label> Fra (klokkeslett):</label> <select name="timeFrom"> <?php for($i = 0; $i <= 24; $i++): $t = 3600 * $i; $t = date('H', ($timeNow - $t)); ?> <option value="<?php echo $i;?>" <?php echo ($timeFrom == $i ? 'SELECTED' : ''); ?>><?php echo $t;?>:00</option> <?php endfor; ?> </select> <label> Til (klokkeslett):</label> <select name="timeTo"> <?php for($i = 0; $i <= 24; $i++): $t = 3600 * $i; $t = date('H', ($timeNow + $t)); ?> <option value="<?php echo $i;?>" <?php echo ($timeTo == $i ? 'SELECTED' : ''); ?>><?php echo $t;?>:00</option> <?php endfor; ?> </select> <label></label> <input type="submit" value="Vis flygninger" name="btnSearch" /> All flydata hentes fra <em><a href="http://www.avinor.no/" target="_blank">avinor.no</a></em> </form> </div> <?php function fix_norwegian_characters( $subject ) { // Dersom denne ruten er kansellert skal den ha rød bakgrunnsfarge /// if($flight['status']['code']['code'] == "C") $color = "cancelled"; ////////////////////////////////////////////////////////////////////// // Hvilke bokstaver skal vi se etter? $search = array( 'Æ', 'Ø', 'Å', 'æ', 'ø', 'å' ); // Hvis de finnes, bytt de ut med følgende $replace = array( 'A', 'O', 'A', 'a', 'o', 'a' ); // Hvis du opplever spørsmålstegn eller andre rare symboler // istedet for AOA, fjerner du kommentaren fra linjen under: $subject = utf8_decode( $subject ); // Returner nytt, korrekt navn return str_replace( $search, $replace, $subject ); } function getHoursFromDate($time){ date_default_timezone_set('UTC'); if($time != ""){ $currentTime = str_replace("T", " ", $time); $date = new DateTime($currentTime); $timeZone = new DateTimeZone('Europe/Oslo'); $date->setTimezone($timeZone); return $date->format('H:i'); } return ''; } $avinor->setAirport($airport) ->setTimeFrom($timeFrom) ->setTimeTo($timeTo); if($direction != "0") $avinor->setDirection($direction); $result = $avinor->getResult(); ?> <table width="832"> <thead> </thead> <tr> <td width="82"> </td> <td width="107"><strong>Rutenr</strong></td> <td width="93" class="align-left"><strong>Tid</strong></td> <td width="176"><strong>Destinasjon</strong></td> <td width="167"><div align="left"><strong>Flyselskap</strong></div></td> <td width="97"><strong>Status</strong></td> <?php foreach($result as $flight): $avg = getHoursFromDate($flight['scheduleTime']); $status = $flight['status']['code']['no'] . ' ' . getHoursFromDate($flight['status']['time']); if($flight['airport']['code'] == $avinor->getAirport() && $flight['direction'] != "A"){ $airport = $flight['viaAirport'][0]['name']; }else $airport = $flight['airport']['name']; if($flight['direction'] == "A"){ $fligtIcon = array( 'src' => 'iconArrowDown.png', 'text'=> 'Ankomster' ); }else{ $fligtIcon = array( 'src' => 'iconArrowUp.png', 'text'=> 'Avganger' ); } $viaAirport = ''; if(is_array($flight['viaAirport']) && count($flight['viaAirport']) > 0){ foreach ($flight['viaAirport'] as $ap){ /** * CODE: $ap['code'] * NAME: $ap['name'] */ $viaAirport .= utf8_decode($ap['name']); } } ?> <td width="64"></td> </tr> <tr> <td><img src="gfx/<?php echo $fligtIcon['src']; ?>" alt="<?php echo $fligtIcon['text']; ?>" /></td> <td><?php echo $flight['flightId']; ?></td> <td><?php echo $avg; ?></td> <td><?php echo utf8_decode($airport), $flight->via_airport; ?></td> <td><img src="<?php echo $flight['airline']['icon']; ?>" alt="" /><a href="/<?php echo fix_norwegian_characters($flight['airline']['name']); ?>.html"> <?php echo fix_norwegian_characters($flight['airline']['name']); ?> </a> </td> <td><?php echo $status; ?></td> </tr> <?php endforeach; ?> </table> Og her er Vær-php'n fra forsiden: <?php // Gjøre om url til fil (bruk ditt steds varsel.xml) $file = "http://www.yr.no/sted/Norge/Nord-Tr%C3%B8ndelag/Stj%C3%B8rdal/Trondheim_lufthavn,_V%C3%A6rnes/varsel.xml"; if($content = file_get_contents( $file )) { // kjør script $content = file_get_contents( $file ); $xml = simplexml_load_string( $content ); //dette er for å finne det riktige symbolet. Du må lagde bilde 01.png-16.png fra yr.no(http://www.yr.no/om_yrno/1.1940495). Kall de for 1.png-16.png og legg dem i grafics/yr echo '<img src="/grafics/yr1/'.$xml->forecast->tabular->time[1]->symbol['number'].'.png" />' ." "; //dette er for å få temperaturen echo $xml->forecast->tabular->time[0]->temperature['value']. " °C, "; //dette er for å få vind echo $xml->forecast->tabular->time[0]->windSpeed['mps']. " ms." ; //dette er for å få vindretningen echo $xml->forecast->tabular->time[0]->windDirection['WINDDIRECTION'] ; //dette er for å skrive stedsnavn echo "" . $xml->location; $xml->location["id"] . "<br />"; } ?> Endret 27. desember 2010 av Runar Lenke til kommentar
Thomas. Skrevet 23. desember 2010 Del Skrevet 23. desember 2010 Sansynligvis er allow_url_include satt til OFF i php.ini. Av sikkerhetsmessige årsaker kan det kun skrues på via endring av php.ini. Det vil si at du ikke kan bruke ini_set til å slå den på. Og siden du har et vanlig web-hotell så kan du mest sansynlig ikke endre dette selv Vil tru de har en felles-ini fil på alle web-hoteller, så de kommer nok ikke til å tillate det. Men du kan jo kontakte dem og høre Lenke til kommentar
enva Skrevet 27. desember 2010 Forfatter Del Skrevet 27. desember 2010 (endret) Men la oss si at jeg har access til alle mulige innstillinger på domene og serveren min, hvordan endrer jeg da allow_url_include fra OFF til ON. - Hvor finner jeg php.ini? Er dette en fil som skal ligge i serveren? Endret 27. desember 2010 av enva Lenke til kommentar
Thomas. Skrevet 27. desember 2010 Del Skrevet 27. desember 2010 Men la oss si at jeg har access til alle mulige innstillinger på domene og serveren min, hvordan endrer jeg allow_url_include fra OFF til ON. - Hvor finner jeg php.ini? Er dette en fil som skal ligge i serveren? På linux/ubuntu system ligger den under /etc/php.ini. På windows ligger den under C:\php\php.ini. Lenke til kommentar
enva Skrevet 27. desember 2010 Forfatter Del Skrevet 27. desember 2010 (endret) Jeg har linux server, og i min etc-mappe finner jeg følgende: En mappe med navnet: Trondheimlufthavn.net En fil med navnet: ftpquota Inne i Trondheimlufthavn.net-mappa ligger følgende: Inne i den mappa du ser heter @pwcache ligger dette: Har jeg php.ini? Dersom ikke, kan jeg opprette en? Og hvordan gjør jeg ev det? Endret 27. desember 2010 av enva Lenke til kommentar
TheClown Skrevet 28. desember 2010 Del Skrevet 28. desember 2010 Kontakt hosten og spør hva du skal gjøre. Ser ikke ut som om du har tilgang til php.ini-fila Lenke til kommentar
enva Skrevet 4. januar 2011 Forfatter Del Skrevet 4. januar 2011 I avvente av svar, fant jeg ut på mine supportsider at "allow_url_fopen" ikke er tillatt. Er dette det samme som "allow_url_include"? Lenke til kommentar
Thomas. Skrevet 4. januar 2011 Del Skrevet 4. januar 2011 I avvente av svar, fant jeg ut på mine supportsider at "allow_url_fopen" ikke er tillatt. Er dette det samme som "allow_url_include"? fopen, åpne url include, include url Går for det samme ca Da har du fått et eksempel på 1 av mange ulemper ved webhotell om du driver med mer enn en "personlig hjemmeside". Lenke til kommentar
enva Skrevet 4. januar 2011 Forfatter Del Skrevet 4. januar 2011 Ja. Ble anbefalt GoLarge av en annen her på forumet, og trodde det var et seriøst selskap med god kundeservice osv. Slik virker det ikke, de er umulige å nå pr e-post, og de har ikke support-telefon. CRAP! Det blir nok til at jeg bytter tilbake til FastName. Der får man ihvertfall det man betaler for! Lenke til kommentar
emilkje Skrevet 5. januar 2011 Del Skrevet 5. januar 2011 (endret) hvis du har problemer med file_get_contents, kan du jo eventuelt prøve med PHP modulen cUrl da denne ikke er avhengig av allow_url_include... cUrl regner jeg med er installert hos din host fra før. Her er en funksjon som er tilsvarende file_get_contents: function getContents($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $contents = curl_exec($ch); return $contents ? $contents : false; } Endret 5. januar 2011 av emilkje Lenke til kommentar
enva Skrevet 6. januar 2011 Forfatter Del Skrevet 6. januar 2011 Har byttet tilbake nå. Driver å flytter, så holder meg til allow_url_include. Men takk uansett! Lenke til kommentar
emilkje Skrevet 6. januar 2011 Del Skrevet 6. januar 2011 Den er grei! Kan være verdt å kikke på uansett da cUrl er en god del raskere og mer fleksibel (i mange tilfeller) enn file_get_contents(). Lenke til kommentar
enva Skrevet 7. januar 2011 Forfatter Del Skrevet 7. januar 2011 (endret) Aha, mange takk for info. Skal titte på det og se om det kan være noe mtp hastighet som du nevner Endret 7. januar 2011 av enva Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå