htaccess met een Fatal error: Call to a member function find

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • kinderpindakaas
  • Registratie: Oktober 2006
  • Laatst online: 12-03-2024
Momenteel ben ik een een website met een groot aantal pagina's aan het omzetten van frames naar dynamisch.
Het gaat om een grote hoeveelheid pagina's, dus wil ik het zo simpel mogelijk oplossen.

Ik heb het als volgt aangepakt
Het htaccess bestand heb ik voorzien van de volgende rewrite regel:

code:
1
2
3
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.*)\.html$ frame.php?page=$1\.html [NC]


Daarmee zorg ik ervoor dat ik elke pagina die voorheen los in een frame werd ingeladen doorverwijst naar frame.php.

Dus een request www.mijndomein.nl/pietje.html haalt op de achtergrond zijn data op uit www.mijndomein.nl/frame.php?page=pietje.html

In frame.php heb ik de volgende code die vervolgens de opgevraagde pagina include()
code:
1
2
3
4
5
6
7
8
        $file = basename($_GET['page']);
    if (file_exists($file)) {
       require_once("simple_html_dom.php");
       $html = new simple_html_dom();
       $html->load_file($_GET['page']);
       $e = $html->find("body",0);
       echo $e->innertext;
    }


Ik maak daar gebruik van een parser. http://simplehtmldom.sourceforge.net/
Hij leest eerst de gehele pagina pietje.html in en echoot vervolgens alleen wat er tussen de body tags staat.

Alles werkt in eerste instantie naar behoren zolang je allereerste bezoek langs www.mijndomein.nl/index.php is geweest
Van daaruit kun je alle linkjes prima doorklikken en laadt hij alles prima in.

Echter als ik een verse browser open en direct www.mijndomein.nl/pietje.html opvraag, dan krijg ik:
Fatal error: Call to a member function find() on a non-object in simple_html_dom.php on line 879

Ik kan dan alle linkjes afgaan, maar ik krijg elke keer dezelfde error, tenzij dat ik weer naar home (www.mijndomein.nl) klik en vandaar uit verder klik.

De allereerste request moet een keer langs de index.php in de root folder zijn geweest wil het dus werken.
Terwijl er in index.php geen objecten aangemaakt worden, dat gebeurd alleen in frame.php

[ Voor 6% gewijzigd door kinderpindakaas op 16-07-2011 22:56 ]


Acties:
  • 0 Henk 'm!

  • kluyze
  • Registratie: Augustus 2004
  • Niet online
doe eens een print_r/var_dump van de $_GET (voor de load_file) en eventueel ook eens een echo van $html->innertext (na de load_file)

[ Voor 16% gewijzigd door kluyze op 16-07-2011 23:36 ]


Acties:
  • 0 Henk 'm!

  • kinderpindakaas
  • Registratie: Oktober 2006
  • Laatst online: 12-03-2024
Die GET variabele bestaat gewoon als ik hem print.
Print van $html->innertext had ik ook al gedaan, maar $html object bestaat niet en geeft dus een vergelijk bare error maar dan voor de functie innertext()

Erg vreemd.
Bij een directe link is je referrer veld natuurlijk wel leeg.
Misschien heeft het daar iets mee te maken

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Zet error_reporting op E_ALL (of beter: -1 ) en display errors on.

En regel 879 (alarmbelletje verdacht grote beerputfile gaat af) komt overeen met 5 hier? En var_dump $html eens?

En hopelijk bouw je nu vooral een conversiescript ipv dat je tot in de lengtE van dagen met je mogelijk onveilige filename input en dom trucjes bezig blijft?

[ Voor 29% gewijzigd door Voutloos op 17-07-2011 00:25 . Reden: Tpyen op een ipad xuigt ]

{signature}


Acties:
  • 0 Henk 'm!

  • kinderpindakaas
  • Registratie: Oktober 2006
  • Laatst online: 12-03-2024
Voutloos schreef op zondag 17 juli 2011 @ 00:19:
En hopelijk bouw je nu vooral een conversiescript ipv dat je tot in de lengtE van dagen met je mogelijk onveilige filename input en dom trucjes bezig blijft?
Hoe bedoel je?
Het blijft een beetje behelpen, maar wat moet je anders?
LFI zwakheden kun je prima afvangen.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Als je het resultaat opslaat, heb je die dom trucjes nooit meer nodig en kan je voortaan gewoon schone template/pagina bestandjes maken. :)

{signature}


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Doe eens netjes backtracen waar die melding vandaan komt?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • kinderpindakaas
  • Registratie: Oktober 2006
  • Laatst online: 12-03-2024
Voutloos schreef op zondag 17 juli 2011 @ 00:41:
Als je het resultaat opslaat, heb je die dom trucjes nooit meer nodig en kan je voortaan gewoon schone template/pagina bestandjes maken. :)
Ow zo bedoel, ja uiteraard doe ik dat.
Er is ingecalculeerd dat in een half jaar tijd de oude pagina's zijn verlopen en op dit moment worden de nieuwe pagina's enkel in de nieuwe stijl opgeslagen.

Dit werkt dus wel
code:
1
2
3
4
5
6
7
8
9
10
11
 <?php 
    $file = basename($_GET['page']);
    if (file_exists($file)) {
       require_once("simple_html_dom.php");
       //$html = new simple_html_dom();
       //$html->load_file($file);
       $html = file_get_html($file);
       $e = $html->find("body",0);
       echo $e->innertext;
    }
 ?>


file_get_html() functie maakt dit keer wel netjes een object aan, ook al is mijn referrer veld leeg.
In de oude code zit er dus iets niet goed in load_file() functie.

Thanx in elk geval voor jullie hulp
Pagina: 1