[PHP] session_start(); en ob_start();

Pagina: 1
Acties:
  • 223 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BitBit3r
  • Registratie: November 1999
  • Laatst online: 11-03 08:13
Ik krijg het niet voor elkaar session_start(); en ob_start(); te combineren.
Ik moet eerst een sessie starten (voor een later deel) en daarna een bestandje inlezen:


PHP:
1
2
3
4
5
6
7
8
9
10
11
session_start();

    $cwd=getcwd();
    chdir('/map/'); 
    include('includes/application_top.php');
    ob_start(); //start buffering
    include(DIR_WS_BOXES.'shopping_cart1.php');//include another file for the box you want
    $wbox=ob_get_contents();//save it in a variable for later use too
    ob_end_clean();//stop buffering
    //ob_end_flush();
    chdir($cwd);


Als ik de session niet start, wordt het bestand prima ingelezen. Maar met session werkt het dus niet... Hoe kan dit nou?

Wat er ook gebeuren moogh...


Acties:
  • 0 Henk 'm!

  • Mr. Bondt
  • Registratie: Februari 2005
  • Laatst online: 27-08 14:50
http://nl2.php.net/manual/en/function.file-get-contents.php
Is misschien iets minder omslachtig :)

edit:
Hmm, niet goed genoeg gelezen :X

[ Voor 18% gewijzigd door Mr. Bondt op 08-02-2007 08:24 ]


Acties:
  • 0 Henk 'm!

  • BitBit3r
  • Registratie: November 1999
  • Laatst online: 11-03 08:13
Ja, maar doet volgens mij niet hetzelfde... Gaat er namelijk om dat er een stuk van een webwinkel (osCommerce) gebruikt wordt. Als ik via file-get-contents de file benader wordt de broncode neergezet...

Wat er ook gebeuren moogh...


Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

wat dacht je van include()?

edit: oeps, niet goed gelezen. Het gaat je om de buffering. Daar heb ik geen ervaring mee :)

[ Voor 64% gewijzigd door dawuss op 07-02-2007 22:47 ]

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
Op http://nl3.php.net/manual/nl/function.session-start.php staat:
session_start() will register internal output handler for URL rewriting when trans-sid is enabled. If a user uses ob_gzhandler or like with ob_start(), the order of output handler is important for proper output. For example, user must register ob_gzhandler before session start.
Dus je volgens mij zul je van te voren ob_start() aan moeten roepen.

@Mr. Bondt: hij wil de inhoud van een phpbestand includen (dus parsen), niet de inhoud ophalen.

@dawuss: die gebruikt hij toch al?

[ Voor 3% gewijzigd door Pete op 07-02-2007 22:46 ]

petersmit.eu


Acties:
  • 0 Henk 'm!

  • BitBit3r
  • Registratie: November 1999
  • Laatst online: 11-03 08:13
Als ik die sessie daarna start geeft ie verderop

code:
1
2
3
4
5
Warning: mysql_real_escape_string(): 7 is not a valid MySQL-Link resource in /database.php on line 130

Warning: mysql_query(): 7 is not a valid MySQL-Link resource in /database.php on line 44
- 
select count(*) as total from sessions where sesskey = ''


Blijkbaar komt de sessionkey dan dus niet goed door?

Wat er ook gebeuren moogh...


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

je hebt toch niet je DB connectie in je session gezet?

Acties:
  • 0 Henk 'm!

  • ID-College
  • Registratie: November 2003
  • Laatst online: 21:03
Lijkt me dat ie een sesskey in zijn sessie zet?

Acties:
  • 0 Henk 'm!

  • BitBit3r
  • Registratie: November 1999
  • Laatst online: 11-03 08:13
Ja inderdaad,

bijvoorbeeld

sesskey: fb9443f79b916c4d134e9dccb7903ad
expiry: 1170883120
value : cart|O:12:"shoppingCart":5:{s:8:"contents";a:3:{i:....

zal gaan kijken wanneer dat aangemaakt wordt...

Wat er ook gebeuren moogh...


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

iig geef je de verkeerde database link door aan mysql_real_escape_string, dus check dat even ;)

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
De code zoals in de TS zou prima moeten werken. Wat is de foutmelding die je krijgt als je die zo uitvoert.

Eerst de sessie starten en dan ob_start(), zou echt geen problemen op moeten leveren.

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • BitBit3r
  • Registratie: November 1999
  • Laatst online: 11-03 08:13
@Erkens: Als ik geen sessie start, geeft hij die fout niet... erg vaag maar denk niet dat daar de fout zit. Of wel?

@Borizz: Dan geeft ie geen foutmelding...

Maar is het mogelijk dat die ob_start iets verandert aan de sessiekey?

[ Voor 18% gewijzigd door BitBit3r op 07-02-2007 23:20 ]

Wat er ook gebeuren moogh...


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

BitBit3r schreef op woensdag 07 februari 2007 @ 23:19:
@Erkens: Als ik geen sessie start, geeft hij die fout niet... erg vaag maar denk niet dat daar de fout zit. Of wel?
blijkbaar zit er iets in je session wat het andere script niet leuk vind. ik neem aan dat register globals uit staat?

Acties:
  • 0 Henk 'm!

  • BitBit3r
  • Registratie: November 1999
  • Laatst online: 11-03 08:13
waar kan ik dat zien?

Wat er ook gebeuren moogh...


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

php.ini? of doe een phpinfo()

Acties:
  • 0 Henk 'm!

  • BitBit3r
  • Registratie: November 1999
  • Laatst online: 11-03 08:13
register_globals On On

Bad News?

Wat er ook gebeuren moogh...


Acties:
  • 0 Henk 'm!

  • seamus21
  • Registratie: December 2001
  • Laatst online: 24-02-2018
Zou je misschien even de foutmelding kunnen neerzetten?

Btw als je ob_start() aanroept moet je iig evenvaak ob_end_flush() aanroepen.

Wat ob (output buffer) doet is alle ouput opslaan in een interne buffer totdat je deze flushed. Dan wordt de output wel getoond.

Meer info:

http://nl2.php.net/manual/nl/function.ob-start.php

Daar staat ook wat over evt aanpassingen aan de working dir. Ik zie dit je hier wel wat mee doet. Dus ik raad je aan het even door te lezen.

Zorg er in ieder geval voor dat je ob_start() aanroept voordat je ook maar enige output stuurt. Dus misschien dat je in die include file al output hebt?

Ook zeg je dat je die session start niet kan combineren? Waarom plaats je deze iig niet in 'het latere deel' waar je het over hebt?

Misschien ook handig indien je dit niet al had om bovenaan je script ERROR_REPORTING(E_ALL) te plaatsen.

[ Voor 28% gewijzigd door seamus21 op 07-02-2007 23:43 ]

Always shoot for the moon. Even if you miss you will land among the stars...


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Yup, daardoor kunnen variabelen overschreven worden door bijvoorbeeld die zooi uit je session erg vervelend en bovendien kan dit een security risk zijn. Indien je dit niet kan aanpassen (vraag anders je Hosting Provider om hulp) dan zit er weinig anders op dan te zorgen dat je niet dezelfde variabelen in je session gebruikt als dat er ergens anders gebruikt worden binnen dat script.

Acties:
  • 0 Henk 'm!

  • BitBit3r
  • Registratie: November 1999
  • Laatst online: 11-03 08:13
seamus21 schreef op woensdag 07 februari 2007 @ 23:35:
Zou je misschien even de foutmelding kunnen neerzetten?

Btw als je ob_start() aanroept moet je iig evenvaak ob_end_flush() aanroepen.
Als ik ob_end_flush(); neerzet dan echo't er de inhoud van het geïnclude...
Wat ob (output buffer) doet is alle ouput opslaan in een interne buffer totdat je deze flushed. Dan wordt de output wel getoond.

Meer info:

http://nl2.php.net/manual/nl/function.ob-start.php

Daar staat ook wat over evt aanpassingen aan de working dir. Ik zie dit je hier wel wat mee doet. Dus ik raad je aan het even door te lezen.
Snap dat stukje over die working dir niet helemaal, maar volgens mij zorgt chdir($cwd); dat weer terug wordt gegaan naar de juiste map.
Zorg er in ieder geval voor dat je ob_start() aanroept voordat je ook maar enige output stuurt. Dus misschien dat je in die include file al output hebt?
Blijkbaar wordt in die include tep_session_start() aangeroepen, even zoeken wat dat is...
Ook zeg je dat je die session start niet kan combineren? Waarom plaats je deze iig niet in 'het latere deel' waar je het over hebt?

Misschien ook handig indien je dit niet al had om bovenaan je script ERROR_REPORTING(E_ALL) te plaatsen.

Wat er ook gebeuren moogh...


Acties:
  • 0 Henk 'm!

  • BitBit3r
  • Registratie: November 1999
  • Laatst online: 11-03 08:13
Die functie:

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
  function tep_session_start() {
    global $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS;

    $sane_session_id = true;

    if (isset($HTTP_GET_VARS[tep_session_name()])) {
      if (preg_match('/^[a-zA-Z0-9]+$/', $HTTP_GET_VARS[tep_session_name()]) == false) {
        unset($HTTP_GET_VARS[tep_session_name()]);

        $sane_session_id = false;
      }
    } elseif (isset($HTTP_POST_VARS[tep_session_name()])) {
      if (preg_match('/^[a-zA-Z0-9]+$/', $HTTP_POST_VARS[tep_session_name()]) == false) {
        unset($HTTP_POST_VARS[tep_session_name()]);

        $sane_session_id = false;
      }
    } elseif (isset($HTTP_COOKIE_VARS[tep_session_name()])) {
      if (preg_match('/^[a-zA-Z0-9]+$/', $HTTP_COOKIE_VARS[tep_session_name()]) == false) {
        $session_data = session_get_cookie_params();

        setcookie(tep_session_name(), '', time()-42000, $session_data['path'], $session_data['domain']);

        $sane_session_id = false;
      }
    }

    if ($sane_session_id == false) {
      tep_redirect(tep_href_link(FILENAME_DEFAULT, '', 'NONSSL', false));
    }

    return session_start();
  }


Zou het kunnen zijn dat register_globals de boel verzieken?

Wat er ook gebeuren moogh...


Acties:
  • 0 Henk 'm!

Verwijderd

Zijn deze niet beter:

$_GET ipv $HTTP_GET_VARS
$_POST ipv $HTTP_POST_VARS
$_COOKIE ipv $HTTP_COOKIE_VARS

[ Voor 32% gewijzigd door Verwijderd op 08-02-2007 14:04 ]


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Verwijderd schreef op donderdag 08 februari 2007 @ 14:02:
Zijn deze niet beter:

$_GET ipv $HTTP_GET_VARS
$_POST ipv $HTTP_POST_VARS
$_COOKIE ipv $HTTP_COOKIE_VARS
Veel beter. De HTTP_... globals zijn al in PHP4 vervangen door die superglobals, herkenbaar aan de voorloopstreep. Die hoef je ook niet bovenaan elke functie global te definiëren.

'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!

Verwijderd

code:
1
2
3
Warning: mysql_real_escape_string(): 7 is not a valid MySQL-Link resource in /database.php on line 130

Warning: mysql_query(): 7 is not a valid MySQL-Link resource in /database.php on line 44
Kun je database.php rond regel 130 ff hier laten zien?
Idem voor database.php rond regel 44

Paar regels boven en onder dat regelnummer. Dan kunnen we naar die MySQL-Link resources kijken.

[ Voor 6% gewijzigd door Verwijderd op 08-02-2007 16:51 ]


Acties:
  • 0 Henk 'm!

  • seamus21
  • Registratie: December 2001
  • Laatst online: 24-02-2018
Dat is ook precies wat include doet he. Gewoon letterlijk neerzetten wat er in het bestand staat. Als je dat anders wilt omdat je bv alleen maar functies wilt aanroepen uit een ander bestand kun je beter require() of require_once() gebruiken.

Always shoot for the moon. Even if you miss you will land among the stars...


Acties:
  • 0 Henk 'm!

  • BitBit3r
  • Registratie: November 1999
  • Laatst online: 11-03 08:13
Verwijderd schreef op donderdag 08 februari 2007 @ 16:51:
[...]


Kun je database.php rond regel 130 ff hier laten zien?
Idem voor database.php rond regel 44

Paar regels boven en onder dat regelnummer. Dan kunnen we naar die MySQL-Link resources kijken.
Rond regel 44
code:
1
2
3
4
5
6
7
8
  function tep_db_query($query, $link = 'db_link') {
    global $$link;

    if (defined('STORE_DB_TRANSACTIONS') && (STORE_DB_TRANSACTIONS == 'true')) {
      error_log('QUERY ' . $query . "\n", 3, STORE_PAGE_PARSE_TIME_LOG);
    }

    $result = mysql_query($query, $$link) or tep_db_error($query, mysql_errno(), mysql_error());


Rond regel 130
code:
1
2
3
4
5
6
7
8
    function tep_db_input($string, $link = 'db_link') {
    global $$link;

    if (function_exists('mysql_real_escape_string')) {
      return mysql_real_escape_string($string, $$link);
    } elseif (function_exists('mysql_escape_string')) {
      return mysql_escape_string($string);
    }

Wat er ook gebeuren moogh...


Acties:
  • 0 Henk 'm!

Verwijderd

Rond regel 44
PHP:
1
2
3
4
5
  function tep_db_query($query, $link = 'db_link') {
    global $$link;
...
    $result = mysql_query($query, $$link) or tep_db_error($query, mysql_errno(), mysql_error());
...
Rond regel 130
PHP:
1
2
3
4
5
    function tep_db_input($string, $link = 'db_link') {
    global $$link;
...
      return mysql_real_escape_string($string, $$link);
...
Volgens mij is er iets mis met jouw $$link variabele.
Ik weet niet wat er precies wordt doorgegeven (qua variabelen) bij de aanroep van de functies
tep_db_query en tep_db_input, maar het moet iig niet "7" zijn.

Mogelijk dat de doorgegeven variabele $link wordt overschreven met de globale inhoud van $$link
offtopic:
en dat is weer het leuke van debuggen ;)

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Pagina: 1