[php] bestand uitspugen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • chielsen
  • Registratie: Oktober 2003
  • Laatst online: 20-09 01:17
Ik wil een script een varibel bestand laten uitspugen.

Dat doe ik nu zo:

PHP:
1
2
3
4
5
6
7
<?
    $bestand = $_POST['file'];
    
    $contents = file_get_contents($bestand);
    
    echo $contents;
?>


Maar dat gaat een stuk trager dan rechtsstreeks het bestand benaderen omdat php ertussen zit die zelf eerst het bestand moet lezen, opslaan in het geheugen en dan pas uitspuugt.
Nu weet ik wel dat je ook een header kan geven dat de browser naar een bepaalde locatie gaat waar het bestand staat maar dan heb ik wat vragen / problemen:

Is het te achterhalen wat de daadwerkelijke locatie van het bestand is?

Als ik met fsockopen verbindt naar dit script volgt ie niet die header op. Dan zou ik dat dus eerst uit moeten lezen en dan weer een socket naar de het juiste adres moeten openen...

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Ik snap niet waarom je voor een header wil weten wat de daadwerkelijke locatie van een file is. Je kijkt daar nu immers ook niet naar. :)
PHP:
1
header('Location: ' . $_POST['file']);

Dit zou gewoon een redirect moeten doen naar de pagina die je zien wil. Eventueel kun je ook naar fpassthru() kunnen gebruiken, al betwijfel ik dat die veel sneller is dan file_get_contents().

'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

Bovendien kan je voor HTTP gewoon fopen() gebruiken, die volgt Location headers als het goed is namelijk wel op. fsockopen() heeft namelijk geen ingebouwde HTTP support ;) Als je fopen() gebruikt ipv fsockopen() zou ie het moeten doen.

Disclaimer: zo werkte het tenminste nog toen ik er voor het laatst iets mee gedaan heb ;)

Acties:
  • 0 Henk 'm!

  • Kees
  • Registratie: Juni 1999
  • Nu online

Kees

Serveradmin / BOFH / DoC

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:10

Robtimus

me Robtimus no like you

Even slightly offtopic: besef je wel dat dit een behoorlijk lek kan geven, zonder enige controle op de file die je kunt uitspugen? Als dit bv op een linux bak draait kun je zo gemakkelijk /etc/passwd en/etc/shadow laten printen, en dat wil je echt niet.

Ga er ook niet vanuit dat de pagina die de POST request verstuurt dit wel afvangt, want die kun je zonder al te veel moeite namaken. Dit wil je dus echt serverside afvangen.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

  • chielsen
  • Registratie: Oktober 2003
  • Laatst online: 20-09 01:17
IceManX schreef op zaterdag 02 april 2005 @ 19:57:
Even slightly offtopic: besef je wel dat dit een behoorlijk lek kan geven, zonder enige controle op de file die je kunt uitspugen? Als dit bv op een linux bak draait kun je zo gemakkelijk /etc/passwd en/etc/shadow laten printen, en dat wil je echt niet.

Ga er ook niet vanuit dat de pagina die de POST request verstuurt dit wel afvangt, want die kun je zonder al te veel moeite namaken. Dit wil je dus echt serverside afvangen.
Dat snap ik natuurlijk ook wel, maar die code heeft niks met mijn probleem te maken dus plaats ik het ook niet. Maar toch bedankt.

Probleem is met fopen dat allow_url_fopen aan zal moeten staan. Aangezien ik geen invloed daarop heb is dat niet zo aantrekkelijk.

Ik weet niet of het kan, maar is het mogelijk dat als je een socket met bijv host.com/file.php hebt en die dan die header teruggeeft wat je uitleest je in hetzelfde socket nog kan verbinden met host.com/file.zip ?

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

chielsen schreef op zaterdag 02 april 2005 @ 20:10:
Probleem is met fopen dat allow_url_fopen aan zal moeten staan. Aangezien ik geen invloed daarop heb is dat niet zo aantrekkelijk.
Datzelfde geldt ook voor file_get_contents en nog een hele rits andere functies. :)

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

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Het is eigenlijk heel simpel:
Als het via je eigen server gaat is het trager maar niet te achterhalen waar het vandaan komt. In alle andere gevallen wel omdat je de client dan verwijst naar de originele host.

Acties:
  • 0 Henk 'm!

  • chielsen
  • Registratie: Oktober 2003
  • Laatst online: 20-09 01:17
-NMe- schreef op zaterdag 02 april 2005 @ 20:25:
[...]

Datzelfde geldt ook voor file_get_contents en nog een hele rits andere functies. :)
Lokaal hoeft dat niet aan te staan hoor...

Wat er dus de bedoeling is, is dat vanaf server1 een verbinding wordt gemaakt naar dit script op server2 met bepaalde variabelen, en dat het script dan het juiste bestand uitspuugt.

Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
IceManX schreef op zaterdag 02 april 2005 @ 19:57:
Even slightly offtopic: besef je wel dat dit een behoorlijk lek kan geven, zonder enige controle op de file die je kunt uitspugen? Als dit bv op een linux bak draait kun je zo gemakkelijk /etc/passwd en/etc/shadow laten printen, en dat wil je echt niet.
offtopic:
/etc/shadow zal (als het goed is!) niet gaan, aangezien die alleen maar en enkel door root gelezen zou kunnen worden. En meestal (als het goed is!) draaien webservers niet onder 't root-account :)

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

chielsen schreef op zaterdag 02 april 2005 @ 23:02:
Lokaal hoeft dat niet aan te staan hoor...
Precies, maar dat geldt dus ook voor fopen:
If PHP has decided that filename specifies a registered protocol, and that protocol is registered as a network URL, PHP will check to make sure that allow_url_fopen is enabled. If it is switched off, PHP will emit a warning and the fopen call will fail.
Bron: http://nl3.php.net/fopen
Wanneer je geen url invoert, maar gewoon een lokale bestandsnaam, dan kun je ook gewoon fopen gebruiken. :)

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

  • chielsen
  • Registratie: Oktober 2003
  • Laatst online: 20-09 01:17
Je bedoelde toch fopen gebruiken ipv fsockpen 8)7 Toch niet ipv file_get_contents :?
Pagina: 1