[php] Fopen werkt niet *

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
[PHP]
Ik heb een script geschreven dat gegevens van de website van de KNVB afhaalt en die vervolgens in een bestand op de server opslaat. Alleen werkt dit script op mijn testservertje thuis wel, maar niet op de "echte" server. Als resultaat krijg ik niets terug, terwijl het thuis wel lukt.

De allow_url_fopen regel, staat bij de server waar het niet werkt op "1". De php-versie is 4.2, terwijl dat bij mij thuis 4.3 is, weet niet of dat het kan zijn?

De gehele website van de KNVB fopen()-en werkt wel, maar als ik met eregi(), een bepaalt aantal regels eruit wil halen werkt het niet.. Wat's the matter?

[ Voor 4% gewijzigd door Verwijderd op 21-08-2003 10:18 ]


  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Als je op je thuis server de site van de KNVB opend werkt het wel, maar via de host niet? Misschien nog eens goed alle instellingen van jouw server vergelijken met die van de host/server..
Heb je al gezocht op GoT of Google of misschien andere dit probleem ook al eens hebben gehad?

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Verwijderd

Topicstarter
Jep, ik heb veel gezocht, maar niks gevonden. Ik neem toch echt aan dat het een instelling van de server is, maar welke zou ik niet weten. Onderstaand script werkt trouwens wel op de server waar mijn script niet werkt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php 
$bestand = fopen ("http://www.php.net/", "r"); 
if (!$bestand) { 
    echo "<p>Kon remote bestand niet open.\n"; 
    exit; 
} 
while (!feof ($bestand)) { 
    $regel = fgets ($bestand, 1024); 
     
    if (eregi ("<title>(.*)</title>", $regel, $matches)) { 
        $titel = $matches[1]; 
        break; 
    } 
} 
fclose($bestand); 
print"$titel"; 
?> 


Dus ja, dat is wel erg vreemd..

[ Voor 10% gewijzigd door Verwijderd op 21-08-2003 11:04 ]


  • Jelle Niemantsverdriet
  • Registratie: Februari 2000
  • Laatst online: 18-09 08:50
Je zegt dat de hele website inlezen met fopen wel werkt, dus ligt de conclusie dat er iets in je eregi gedeelte niet klopt meer voor de hand.

Maar zonder code of andere informatie blijft dat een beetje koffiedik kijken.

Debuggen lijkt me: geef uitvoer, print_r je arrays, etc.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Ik denk dan toch dat het aan je script ligt. Laat eens wat relevante code zien? Op deze manier blijft het een beetje gokken. Daarnaast bevordert het de leesbaarheid waneer je [php] tags om je code heen zet.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
http://jeugd.togb.nl/SSC/test.php

Dit returneert niets..

Ik roep deze file aan met team=a1 ofzo.. en dan haalt die de link op.. Alleen vindt hij niks en returneert hij lege array..

[ Voor 255% gewijzigd door Verwijderd op 21-08-2003 11:13 ]


  • Elroy
  • Registratie: April 2000
  • Laatst online: 08-08 16:20

Elroy

Zelda!!!

je doet echo $tekst[1]; maar dat bestaat volgens mij helemaal niet (geen array).
Verander dat een naar echo $tekst;

Specs Computer


Verwijderd

Topicstarter
Voorbeeldlink:

"http://www.knvb.nl/comp/wclub.sps?clubid=BBDY967&clubName=TOGB%2C+BERKEL+EN+RODENRIJS&teamtype1=PUP%2C&teamtype2=VE&teamtype3=1&teamName=0275+F-Pupillen+%28najaar%29%2C+F5&teamno=39&aand=0275&klasse=20&klassename=10e+klasse&poule=E&dist=West2&period=0&results=4&cPage=6&wizPath=345"

Verwijderd

Topicstarter
Elroy schreef op 21 August 2003 @ 11:13:
je doet echo $tekst[1]; maar dat bestaat volgens mij helemaal niet (geen array).
Verander dat een naar echo $tekst;
Nee, dat is het niet.. Het wordt opgeslagen in een een array, je moet dan $tekst[1] printen.. Zie ook het kleine stukje script dat wel werkt, eerder in dit topic..

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Elroy schreef op 21 augustus 2003 @ 11:13:
je doet echo $tekst[1]; maar dat bestaat volgens mij helemaal niet (geen array).
Verander dat een naar echo $tekst;
Als het een string was had hij toch gewoon de 2e letter geprint...

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


  • Jelle Niemantsverdriet
  • Registratie: Februari 2000
  • Laatst online: 18-09 08:50
Elroy schreef op 21 August 2003 @ 11:13:
je doet echo $tekst[1]; maar dat bestaat volgens mij helemaal niet (geen array).
Verander dat een naar echo $tekst;
Jawel, die array probeert hij te vullen met eregi.

Maar er zijn volgens mij genoeg punten waar je kunt gaan debuggen:

- je haalt een link uit de database: echo die, klopt die?
- probeer die link dan te openen met fopen, lees 'm helemaal in en echo 'm
- als dat allemaal klopt, is het dus geen fopen probleem en moet je je op je regex-en gaan storten

Verwijderd

Topicstarter
Het is toch heel vreemd dat het bij de ene wel werkt, en bij de ander niet.. Het is hetzelfde script..

Verwijderd

denk dan toch dat het aan de schrijfrechten op de server ligt...wordt daar iets over gezegd in phpinfo() anders moet je effe bij de admin te rade gaan :)

Verwijderd

Topicstarter
PHPinfo(), van degene die wel werkt:
http://www.digitaladmin.nl/info.php

Die niet werkt:
http://www.togb.nl/info.php

Verwijderd

Topicstarter
Als ik de fopen() regel print, dan krijg ik dit terug:
Resource id #3!! Bij server waar het wel werkt is het #7.. Op localhost (werkt het ook) is het ook #3..

Wat betekent dit?..

[ Voor 34% gewijzigd door Verwijderd op 21-08-2003 11:31 ]


Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?
$link="http://www.knvb.nl/comp/wclub.sps?clubid=BBDY967&clubName=TOGB%2C+BERKEL+EN+RODENRIJS&teamtype1=JUN%2C&teamtype2=VE&teamtype3=1&teamName=0221+A-Junioren%2C+A1&teamno=37&aand=0221&klasse=10&klassename=Hoofdklasse&poule=A&dist=West2&period=0&results=4&cPage=6&wizPath=2345"; 

$begin = "<table cellpadding=\"2\" cellspacing=\"2\" border=\"0\" width=\"415\">";
$eind = "</table>[img]\"/1.gif\"[/img]<br><table width=\"412\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">";

if (!$openen = fopen("$link", "r")){
echo "Fopen indeling.php werkt niet!";
}

else {

$lezen = fread($openen, 2000000);
$data = eregi("$begin(.*)$eind", $lezen, $tekst);
fclose($openen);
}
$tekst = str_replace("[img]\"/pix/comp/w_number2_19.gif\"[/img]","<font color=white><b>Nr.</b></font>",$tekst);
$tekst = str_replace("[img]\"/pix/comp/w_team2_19.gif\"[/img]","<font color=white><b>Team</b></font>",$tekst);
$tekst = str_replace("[img]\"/pix/comp/w_preferred_time_19.gif\"[/img]","<font color=white><b>Voorkeurstijd</b></font>",$tekst);
$tekst = str_replace("bgcolor=\"#b2b7ca\"","bgcolor=\"#F8e500\"",$tekst);
$tekst = str_replace("bgcolor=\"#7c82a4\"","bgcolor=\"#000000\"",$tekst);
$tekst = str_replace("<td width=\"100%\">","<td width=200>",$tekst);
$tekst = str_replace("<!--<td><font class=\"small\"></font></td>-->","",$tekst);

$tekst[1]=trim($tekst[1]);

if($tekst[1] == ""){
    echo"Er kon helaas geen indeling opgehaald worden.";
}
else {
    echo "<table border=0 bgcolor=#000000 class=text>";
    echo"$tekst[1]";
    print"</table>";
}
?>



Dit is enkel het script, lijkt mij geen fout in eregi() en werkt op ene server wel en op andere niet.. Werkt het bij jullie?

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op 21 August 2003 @ 11:28:
Als ik de fopen() regel print, dan krijg ik dit terug:
Resource id #3!! Bij server waar het wel werkt is het #7.. Op localhost (werkt het ook) is het ook #3..

Wat betekent dit?..
fopen() bindt een genaamde resource, aangegeven met filename, aan een stream. Als filename van het formaat "schema://..." is, dan wordt aangenomen dat het een URL is en PHP zal dan zoeken naar een protocol handler (ook bekend als een wrapper) voor dat schema. Als er geen wrapper voor dat protocol geregistreerd is, zal PHP een notice weergeven om je te helpen mogelijke problemen in je script te achterhalen en zal dan doorgaan alsof filename verwijst naar een normaal bestand.
:?

Overigens werkt bovenstaand stuk code bij mij wel.... Ik stel dan ook voor dat de TS zelf eens gaat kijken naar zijn code en deze debuggen in plaats van ons te laten raden :?

[ Voor 12% gewijzigd door Spider.007 op 21-08-2003 11:44 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Ik heb een donkerbruin vermoeden dat heir sprake is van slecht debug werk.

Zeer waarschijnlijk gaat het fout bij:
PHP:
1
2
3
4
5
include("functies.php");

$paginaTitel="teams - $team";

if(eregi("^[a-o][0-9]+$",$team)){


Als eens gekeken of deze test succes heeft? (denk aan register globals ed)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Janoz schreef op 21 August 2003 @ 11:54:
Ik heb een donkerbruin vermoeden dat heir sprake is van slecht debug werk.

Zeer waarschijnlijk gaat het fout bij:
PHP:
1
2
3
4
5
6
<?
include("functies.php");

$paginaTitel="teams - $team";

if(eregi("^[a-o][0-9]+$",$team)){


Als eens gekeken of deze test succes heeft? (denk aan register globals ed)
Je moet even kijken naar het laatste script dat ik geplaatst heb, daar heb ik even overbodige code weggelaten en enkel het stuk geplaatst dat nodig is.. Daar zit volgens mij geen fout in, het werkt ook op mijn localhost, maar dus niet op de server van mijn website.. Test het maar is..

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Moet ik het maar testen? Hoe kan ik het nu testen? Ik heb geen toegang tot jou server. Daarnaast heb ik ook niet echt de behoefte om tijdelijk een server op te zetten om het uit te proberen alleen maar omdat jij het zegt.

Leer debuggen. Je geeft eerder al aan dat de pagina in zijn geheel wel goed opgehaald wordt. Aan het einde van het scriptis er toch een andere uitkomst. Waarom ga je dan niet elimineren? Kijken in welke stap het mis gaat ipv die grote sprongen? Zelfs je 'minimale' script bestaat nog uit 35 regels. Als je daar nu een heleboel keer de relevante data een keer afdrukt, dan is het toch niet moeilijk om te ahcterhalen op welke regel de uitvoer ineens anders begint te worden?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1