Gå til innhold

Hei. Har litt PHP/server problemer.


Anbefalte innlegg

saken er at de scriptene jeg har vist i denne tråden har virket alle sammen, men at scripte som henter info fra XML filen ikke lengre virker på serveren min.

Det er noe galt med serveren. det må det jo være siden det virket før men ikke nå. :cry:

Lenke til kommentar
Videoannonse
Annonse
saken er at de scriptene jeg har vist i denne tråden har virket alle sammen, men at scripte som henter info fra XML filen ikke lengre virker på serveren min.

Det er noe galt med serveren. det må det jo være siden det virket før men ikke nå. :cry:

Hmm, du er sikker på at den xml_parser saken fungerer som det skal? :shrug:

Lenke til kommentar

Fikk svar fra suporten:

Response (Trey Jadhav) - 02/14/2004 05:01 AM

Dear Client

 

Thank you for contacting iPowerweb technical support.

 

Your code : file_get_contents($xmlfile);

is creating a problem, where it is trying to open some external file using PHP functions. You can either store that XML file to your own domain's directory or let us check if ther is any blocking on the socket connections through PHP.

Thank you for your patience in advanced.

 

Kan dette virkelig resultere i at jeg får "The page cannot be displayed"?

Kan jeg bruke XML til å overføre infoen fra Funcom's xml fil, til en xml fil på min egen server?

Hvorfor fungere "Your code : file_get_contents($xmlfile);" på alle andre servere, men ikke på min?

 

Hadde vert kult om noen kunne hjelpe.

Lenke til kommentar

Det kan muligens være at de har skrudd av funksjonen for å åpne eksterne filer? Quote fra manual om file_get_contents:

Tip: You can use a URL as a filename with this function if the fopen wrappers have been enabled. See fopen() for more details on how to specify the filename and Appendix J for a list of supported URL protocols.
Merk deg den delen jeg har uthevet.

 

Hvis nå ikke dette er tilfelle, så vet jeg faktisk ikke helt hvorfor det problemet oppstår. Men du kan i det minste prøve dette før du henter XML fila med file_get_contents:

ini_set("allow_url_fopen", "1");
$xmlfila = file_get_contents($xmlurl);

Men ville være litt merkelig om dette var skrudd av, siden dette er på som default, og hvem som helst kan skru det på igjen slik som over.

 

Det er _mulig_ det er en bug i 4.3.2 :shrug: i så fall har jeg ikke fått med meg det :p men du kan prøve deg på fopen metoden istedet om det over ikke fungerer. En kode som kan erstatte file_get_contents er også nevnt som kommentar på denne siden: http://www.php.net/manual/en/function.file-get-contents.php

Lenke til kommentar
hvem som helst kan vel ikke skru den på igjen uten videre, kan de det?

Hmm, det står at den kan endres på den måten jeg nevnte:

http://www.php.net/manual/en/ref.filesyste...allow-url-fopen

 

Den sier at Changeable er PHP_INI_ALL, som betyr "Entry can be set anywhere" i følge http://www.php.net/manual/en/function.ini-set.php

 

Men det står også at dette kan disables i compile time, men slik jeg forstår, så er dette bare mulig i tidligere versjoner som 4.0.3 og eldre:

For versions up to and including 4.0.3 you can only disable this feature at compile time by using the configuration switch --disable-url-fopen-wrapper .

 

Men siden serveren til aog kjørte versjon 4.3.2, så er vel dette utelukket. (Hvis jeg skal stole på manualen)

 

Edit: Egentlig kan vi glemme helt det med å enable allow-url-fopen, denne er jo enabled i følge phpinfo til aog. http://housemaadiah.com/phpinfo.php

Endret av FuLu
Lenke til kommentar
Får det ikke til å virke nei :ermm:

 

jaja.. jeg bruker home.no.net for denne filen nå.. får se om jeg finner ut av problemet en dag.

Hmm, _det_ skal fungere å hente filer ekstern. Syns dette virker veldig merkelig. Har du prøvd den fopen metoden jeg henviste deg til? En annen mulighet er å bruke file() funksjonen:

$xmldata = implode("", file($xmlfila));

 

Eventuelt kan du prøve deg på det første eksemplet her:

http://www.php.net/manual/en/function.fsockopen.php

 

Denne bør vel også fungere, siden serveren din har sockets enabled.

Lenke til kommentar

db.php

<?php
$fp = fsockopen("http://www.anarchy-online.com/org/stats/d/1/name/6223873/basicstats.xml", 80, $errno, $errstr, 30);
if (!$fp) {
  echo "$errstr ($errno)<br />\n";
} else {
  $out = "GET / HTTP/1.1\r\n";
  $out .= "Host: http://www.anarchy-online.com/org/stats/d/1/name/6223873/basicstats.xml\r\n";
  $out .= "Connection: Close\r\n\r\n";

  fputs($fp, $out);
  while (!feof($fp)) {
      echo fgets($fp, 128);
  }
  fclose($fp);
}
?>

 

 

 

list.php

<?php

# navn på member tag:
$delimiter_tag = "member";

ini_set("allow_url_fopen", "1");
# source url
$url = "my.host.com.db.php";

# henter ned xml
if(!($fh = @fopen($url,'r'))){
 die("fikk ikke åpnet url: <a href=\"$url\">$url</a>");
}

# initialiserer vår parser
$xml_parser = xml_parser_create();

# og tilordner funksjoner for å ta seg av ting og tang
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");

# her skal vi samle opp alle våre data
$character_data = array();

# midliertidig oppsamlingsarray
$current_character = array();

# bruker en signal variable for å angi når vi er inne i en <member> tag
$in_delimiter_tag = 0;
 
# bruker upper string i XML parsing (hvorfor det????)
$delimiter_tag = strtoupper($delimiter_tag);
 
# søker gjennom xml documentet
while($data = fread($fh, 4096)){
 if(!xml_parse($xml_parser,$data,feof($fh))){
   die(sprintf("XML error: %s på linje %d",
               xml_error_string(xml_get_error_code($xml_parser)),
               xml_get_current_line_number($xml_parser)));
 }
}
xml_parser_free($xml_parser);

# dumper data for å vise hva vi har funnet:
if(isset($_GET['dump'])){
 echo "<pre>";
 print_r($character_data);
 echo "</pre>";
 exit;
}

# heading
echo "<h1>House Maadiah</h1><h2>Number of members: ";
echo count($character_data);
echo "</h2><h3>Avg. level: ";

# finner gjennomsnitt
if(count($character_data)){
 foreach($character_data as $character){
   $snitt += $character['LEVEL']/count($character_data);
 }
}
$snitt = round($snitt);

echo "$snitt</h3>\n";

# teller for å sette bakgrunnsfarge
$counter = 0;

foreach($character_data as $character){
 
 if($i=1-$i)
   echo '<hr style="visibility: hidden; margin: 0; border: 0; clear: both;" />' . "\n";
 
 # character div
 echo '<div style="background-color: ' . ( in_array(++$counter % 4, array(3,0) ) ? '#efefef' : '#cccccc' ) . '; padding: 1em; float: left; width: 380px; overflow: hidden;">' . "\n";  
 
 # navn
 echo '<h2 style="margin-top: 0;">';
 echo $character['FIRSTNAME'] . ' <span style="text-decoration: underline;">' . $character['NICKNAME'];
 echo '</span> ' . $character['LASTNAME'] . "</h2>\n";
 
 # bilde
 echo '<img src="' . $character['SMALLPHOTO_URL'] . '" alt="' . $character['NICKNAME'] . '" style=';
 echo '"float: left; margin: 1em; border: 1px solid #333333;"/>' . "\n";
 
 # resten
 echo '<div style="clear: left;">' . "\n";
 echo '<strong>Rank:</strong> ' . $character['RANK_NAME'] . "<br/>\n";
 echo '<strong>Level:</strong> ' . $character['LEVEL'] . "<br/>\n";
 echo '<strong>Profession:</strong> ' . $character['PROFESSION'] . "<br/>\n";
 echo '<strong>Gender:</strong> ' . $character['GENDER'] . "<br/>\n";
 echo '<strong>Breed:</strong> ' . $character['BREED'] . "<br/>\n";
 echo "</div>\n</div>\n\n";
 
}

# husk at funksjoner har lokalt "name space", må bruke global for å få tilgang
# til andre variable.

function startElement($xml_parser,$name,$attrs){
 global $current_element,$delimiter_tag,$in_delimiter_tag;
 
 # hvis vi er innenfor en <member> tag, skal vi huske på dette tag-navnet
 if($in_delimiter_tag and $name != $delimiter_tag){
   $current_element = $name;
 }
 # eller hvis dette er en <member> tag, så sier vi fra at vi har gått inn i en <member> tag
 else if($name == $delimiter_tag){
   $in_delimiter_tag = 1;
   $current_element = "";
 }
 # hvis ikke, skal vi bare glemme denne tagen
 else{
   $current_element = "";
 }
}

function endElement($xml_parser,$name){

 global $character_data,$delimiter_tag,$current_character;
 
 # ved en /tag, skal vi uansett ikke ha noe i denne variabelen
 $current_element = "";
 
 # hvis vi dessuten har gått ut av en </member> tag, skal vi oppdatere lista med 
 # characteren funnet og gjøre klar for ny character
 if($name == $delimiter_tag){
 # legger til denne charactern i lista
   $character_data[] = $current_character;
   # tømmer oppsamlingslista
   $current_character = array();
   # og sier fra at vi ikke lenger er i en character tag
   $in_delimiter_tag = 0;
 }
}

function characterData($xml_parser, $data){
 global $current_element,$current_character;
 
 # lagrer data funnet
 if($current_element){
 # må bruke trim fordi parsern tar med alt av linjeskifter og blanks
   $current_character{$current_element} .= trim($data);
 }
   
}

?>

 

Ellr er jeg helt på villspor nå?

 

 

Har du prøvd den fopen metoden jeg henviste deg til?
ja.. jeg prøvde d. funket ikke.
Lenke til kommentar

hmm.. tror jeg har missforstått litt.. men uansett db.php blir slik.

 

 

koden ser slik ut:

<?php
$fp = fsockopen("http://www.anarchy-online.com", 80, $errno, $errstr, 30);
if (!$fp) {
 echo "$errstr ($errno)<br />\n";
} else {
 $out = "GET /org/stats/d/1/name/6223873/basicstats.xml HTTP/1.1\r\n;
 $out .= "Host: http://www.anarchy-online.com\r\n";
 $out .= "Connection: Close\r\n\r\n";

 fputs($fp, $out);
 while (!feof($fp)) {
     echo fgets($fp, 128);
 }
 fclose($fp);
}
?>

Lenke til kommentar

Hmm, prøv å fjern http:// fra url'en :blush: tydeligvis skal dette ikke være der ifølge denne http://www.php.net/manual/en/transports.php

 

Da blir koden slik:

<?php
$fp = fsockopen("www.anarchy-online.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /org/stats/d/1/name/6223873/basicstats.xml HTTP/1.1\r\n";
$out .= "Host: www.anarchy-online.com\r\n";
$out .= "Connection: Close\r\n\r\n";

fputs($fp, $out);
while (!feof($fp)) {
    echo fgets($fp, 128);
}
fclose($fp);
}
?>

Lenke til kommentar

Ok, da er det ikke stort mer jeg kan hjelpe deg med. Da er det enten ISP'en din som blokkerer for slik utgående requests (som muligens er vanlig blant ISP'er), eller så har funcom svartetlistet ISP'en (men det tviler jeg sterkt på :D ). Så da er det vel bare ISP'en som rett og slett ikke lar deg gjøre dette virker det som. Ta kontakt med dem og nevn alle metoder du har prøvd deg på. Eventuelt spør om de sperrer trafikk ut fra server for å requeste et slik XML dokument via HTTP protokollen.

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...