Gå til innhold

Script fungerer plutselig ikke


Anbefalte innlegg

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? :cry:

Endret av enva
Lenke til kommentar
Videoannonse
Annonse

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 av Thomas.
Lenke til kommentar

Bruker file_get_contents ja. (trur jeg :innocent: )

 

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 av Runar
Lenke til kommentar

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

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 av enva
Lenke til kommentar

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

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:

tl-1.jpg

 

Inne i den mappa du ser heter @pwcache ligger dette:

tl1.jpg

 

Har jeg php.ini? Dersom ikke, kan jeg opprette en? Og hvordan gjør jeg ev det?

Endret av enva
Lenke til kommentar

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

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

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 av emilkje
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...