[PHP] fwrite via ftp?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • qwertyuiop
  • Registratie: Juni 2002
  • Laatst online: 31-07 14:20
Hai :) ,

Mijn bedoeling is om een string op te slaan in een bestand. Zie de volgende code.

Dit werkt (eerst even lezen voor de test; test ok):
code:
1
2
3
4
$file = "ftp://" . rawurlencode(FTP_USERNAME) . ":" . rawurlencode(FTP_PASSWORD) . "@" . FTP_SERVER . "/filename";
$ftpFile = fopen($file, "r");
$fileBuffer = fread($ftpFile, 8192);
fclose($ftpFile);

Dit werkt niet:
code:
1
2
3
4
5
6
7
$file= "ftp://" . rawurlencode(FTP_USERNAME) . ":" . rawurlencode(FTP_PASSWORD) . "@" . FTP_SERVER . "/filename";
$ftpFile = fopen($file, "w");
$string = "Blaat zei het schaap";
if (fputs($ftpFile, $string)) {
    echo "Done";
}
fclose($ftpFile);

Blijkbaar kan er niet geschreven worden naar het bestand. "a" van append is wel mogelijk maar dan gaat de pointer achteraan in het bestand staan en heb ik de oude meuk er nog instaan.

Met de permissie heeft het ook niets te maken want de de owner is hetzelfde als de FTP_USERNAME.

Help? :/

[ Voor 11% gewijzigd door qwertyuiop op 17-07-2005 21:32 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Als je eens met http://nl2.php.net/manual/nl/function.is-writable.php gaat kijken of het bestand wel schrijfbaar is.

FTP user heeft opzich niet zoveel te maken met de rechten, aangezien Apache schrijfrechten moet hebben.

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Haal de file liever even op naar je eigen server, pas hem daar aan en upload hem dan terug. Direct op een remote filesystem gaan schrijven lijkt me niet echt verstandig, en het verbaast me eerlijk gezegd dat een append wel mag.

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

  • qwertyuiop
  • Registratie: Juni 2002
  • Laatst online: 31-07 14:20
is_writable geeft aan dat het niet schrijfbaar is. Maar ook wordt vermeld op de site van php.net:
Opmerking: This function will not work on remote files as the file to be examined must be accessible via the servers filesystem.
-NMe- schreef op zondag 17 juli 2005 @ 22:23:
Haal de file liever even op naar je eigen server, pas hem daar aan en upload hem dan terug. Direct op een remote filesystem gaan schrijven lijkt me niet echt verstandig, en het verbaast me eerlijk gezegd dat een append wel mag.
De bedoeling is dan ook om remote te gaan schrijven. Uit security overwegingen probeer ik via een FTP verbinding het bestand te schrijven. Het bestand lokaal te halen zal geen oplossing zijn.

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Zou dit misschien met ftp_fput kunnen?
Die heeft namelijk gewoon een fopen handle als argument :)

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • qwertyuiop
  • Registratie: Juni 2002
  • Laatst online: 31-07 14:20
ftp_fput -- Upload van een open bestands pointer naar de FTP server
deze accepteerd helaas geen string.

Kan ik niet tijdelijk bestand een bestand aanmaken in de temp dir. van php?

Misschien moet ik mijzelf maar eens gaan verdiepen in cgi. Kijken wat daar de mogelijkheden van zijn.

[ Voor 21% gewijzigd door qwertyuiop op 17-07-2005 23:32 ]


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Ik zit een beetje verkeerd te denken idd, op die manier moet je namelijk nog steeds een schrijfbaar bestand hebben.
Anders kan je de inhoud van de handle nog steeds niet veranderen.

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

qwertyuiop schreef op zondag 17 juli 2005 @ 23:19:
Kan ik niet tijdelijk bestand een bestand aanmaken in de temp dir. van php?
Dat zei ik daarstraks toch al? File downloaden, editen en weer uploaden. Daarna kun je die file weer wissen van de lokale server.
Misschien moet ik mijzelf maar eens gaan verdiepen in cgi. Kijken wat daar de mogelijkheden van zijn.
Waarom zou het met CGI willen doen? Grote kans dat je dan tegen dezelfde problemen aanloopt als nu, aangezien dit waarschijnlijk gewoon een rechtenprobleem is of iets dergelijks. Overigens is CGI ook niet iets dat je kan vergelijken met PHP omdat CGI geen scriptingtaal is, maar een interface. Perl is een veelgebruikte scriptingtaal binnen CGI.

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

  • qwertyuiop
  • Registratie: Juni 2002
  • Laatst online: 31-07 14:20
Dit werkt! :)

Code is misschien wat omslachtig maar ik heb o.a. de verwijzingen naar functies eruit gehaald.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
$file= "ftp://" . rawurlencode(FTP_USERNAME) . ":" . rawurlencode(FTP_PASSWORD) . "@" . FTP_SERVER . "/filename";
$string = "Blaat zei het schaap";
$ftpChmodStr = "CHMOD 0666 " . "/filename";
if ($ftpChmod = ftp_site(ftp_connect(FTP_SERVER, FTP_SERVER_PORT), $ftpChmodStr)) {
    $file = fopen("./filename", "w");
    if (fwrite($file, $string, 8192)) {
        echo "Done";
    }
    fclose($file);
    $ftpChmodStr = "CHMOD 0644 " . "/filename";
    $ftpChmod = ftp_site(ftpConnect(), $ftpChmodStr);
    ftp_close(ftp_connect(FTP_SERVER, FTP_SERVER_PORT));
}


Kortom rechten erop -> schrijven -> rechten eraf.

[ Voor 27% gewijzigd door qwertyuiop op 18-07-2005 22:31 ]


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Dan zit je dus nog steeds met het probleem dat het zo veilig is als de scripts op de server :P
Mja, het bestand group of world readable maken is ook geen oplossing nee, wat dat betreft is dit wel de beste oplossing.

Blog [Stackoverflow] [LinkedIn]

Pagina: 1