![]() |
php - problem mit fileupload von windowssytem auf linuxserver
folgendes problem:
ich habe einen fileupload auf einen linuxserver. mit der funktion $bildname = basename($bildpfad); extrahiere ich den dateinamen vom gesamtpfad. auf meinem windowssystem, wo ich teste, funzt alles bestens, der pfad wird übernommen, der upload auf den linuxserver paßt auch. nur wenn ich das ganze vom linuxserver aus, d.h. von dort den fileupload mit meinem system als quelle, machen will, gibts probleme. Warning: error opening D:\\apache\\htdocs\\poco\\shopkeeper\\pix\\artikel \\ahoi.gif in /home/po006vmo/www/home/shopkeeper/create.php on line 103 es kann also das lokale file nicht gelesen werden. die zeile 103 sieht bei mir so aus: ftp_put($ftp, $bildname, $bildpfad, FTP_BINARY); es wird offensichtlich $bildpfad, also der string, der aus dem file-feld stammt, für den upload nicht angenommen. ich habe mir testhalber die variablen $bildpfad und $bildname ausgeben lassen, auf dem windowssystem werden sie korrekt ausgegeben, funzt ja dort auch alles bestens, nur auf dem linuxserver sehen sie beide gleich aus, nämlich so: D:\\apache\\htdocs\\poco\\shopkeeper\\pix\\artikel \\ahoi.gif was darauf hindeutet, daß die pfadangabe als string zwar sehr wohl übernommen wird, aber nicht als pfad akzeptiert wird, sonst würde nämlich basename($bildpfad) korrekt funktionieren und den dateinamen aus dem obigen pfad extrahieren. an den doppelten "\\" liegts wohl nicht, denn 1. gehts ja unter win und 2. hat ein stripslashes($bildpfad) vor dem ftp-upload auch nix gebracht, dann hab ich dieselbe fehlermeldung nur mit einem "\" jeweils. vielen dank für jede hilfe, ich bin echt am narrischwerden und das teil muß bald fertig sein. :mad: |
Safemod "off" in der php.ini ?
Sloter |
dir-seperators
Hey Andy...
Linux verwendet / (Slashes) um die dirs von einander zu trennen. Kann es sein, dass das der fehler war/ist? Ansonsten setzen wir uns wohl am besten morgen nachmittag zusammen hin und schaun uns das an... (und danach gehts zu ursi :-) grüaßle! Tobias |
@sloter
ja, ist off. was heißt das, nebenbei bemerkt?
|
Safemod (geschützter betrieb) ist eine kleine Sicherheitseinrichtung.
Ist Safemod on, können zB keine Datein auf den Server mit PHP raufgeladen werden. Beim raufladen von Datein wird das Temp-verzeichnis verwendet. Hast du Zugriff auf den Linuxserver? Sloter |
zugriff habe ich, ich kann über ein ftp-prog oder wenn ich das skript testhalber von meinem windowsserver aus ausführe, auch auf den linuxserver raufladen.
es liegt übrigens nicht daran, daß der linuxserver die pfadangabe nicht als solche erkennt, weil "\" darin vorkommen, ich hab den string so aufbereitet, daß die "\" durch "/" ersetzt werden, jetzt lautet die meldung halt Warning: error opening D:/apache/htdocs/poco/shopkeeper/pix/artikel/ahoi.gif in /home/po006vmo/www/home/shopkeeper/create.php on line 106 :( welches temp-verzeichnis, das lokale? |
Bin kein PHP-Guru, aber "D:/apache/..." ist IMHO keine gültige Pfadangabe für Linux, da es die Laufwerksbuchstabenmetapher nicht gibt.
Ich verteh aber auch das Problem nicht so ganz. Du willst einen File-Upload über einen Browser auf einen Webserver relaisieren? Und Du verwendest dafür ein PHP-Script am Server? |
@_m3
genau, es soll über ein auf dem server liegenden script auf diesen server ein lokales file upgeloadet werden. nur das lokale file kann nicht für den upload geöffnet werden und ich frage mich warum. daß es nicht an den pfadunterschieden zwischen windows und linux liegt, ist mir mittlerweile schon klar, aber wo sonst kann da ein fehler sein? v.a. warum wird das lokale file gefunden, wenn ich das script von meinem server aus ausführe und auf den andern server rauflade?
|
Vielleicht hilft der Link
http://www.php4-forum.de/beispiele/anwendung_upload.htm Vielleicht Probleme mit den Dateirechten am Winrechner? Vielleicht die FTP-Funktion in PHP am Linuxserver nicht compiled? Vielleicht die Datei zu groß? (wird in der php.ini geregelt Sloter |
@sloter
thx, aber irgendwie ist das, was im link steht, nicht wirklich eine upload-, sondern lediglich eine copy-beschreibung, warum das unter "upload" gehandelt wird, verstehe ich nicht ganz.
rechteproblem ist es auch keins, hab grad von nem anderen kübel aus übers web betroffene datei geöffnet. und zu groß ist die datei nicht, denn die standarteinstellung ist ja 2mb und das paßt somit. ob die funktion gar nicht compiled wird... kann sein, aber ich kann mir das bei inode schwerlich vorstellen. |
http://www.php.net/manual/de/features.file-upload.php hast Du Dir schon angesehen?
|
Lade eine Datei mit folgendem Inhalt rauf, und rufe sie auf.
<? phpinfo() ?> Dann siehst du ob die Funktion compiled ist. Bei vielen ist die Funktion deaktiviert, da man sie leicht abhören kann und auch dadurch für Fremde leicht zu knacken. Der Link ist ein kleines Script zum kopieren von Datein auf den Server. Soetwas ähnliches hat du ja vor. Sloter |
@sloter
damit beweise ich ja nur, daß generell php-scripts verarbeitet werden können, aber das weiß ich ja schon, daß sie das werden, weil der fileupload nur ein teil eines größeren scripts ist, das ansonsten ja funzt.
|
Nein du siehst auch mit welchen Features PHP compiled ist.
Suche nach FTP Sloter |
Irgendwie steh ich komplett daneben. :verwirrt:
Wenn ich über einen Browser und ein HTMl-Formular ein File uploade, wird das File im Repsonse mitübertragen und unter einem temp-Namen am Server abgespeichert. Von dort kann ich es dann irgendwohin kopieren (daher auch das Copy in dem Link vom Sloter). Wo brauche ich da die FTP-Funktionalität???? :confused: |
@m3
Mit dem normalen Upload gehen einige Sachen nicht. Mit der Funktion ftp() in PHP kannst du zB Verzeichnise anlegen, chmod usw... Wie mit einem richtigen FTP-Clienten. Sloter |
@_m3: also mit kopieren hab ich das nie gemacht, mittels ftp_put kamma gleich angeben, mit welchem pfad genau das file auf den server platziert werden soll.
@sloter: aha, werd ich dann gleich mal probieren, danke! |
@sloter
ftp ist enabled, hätte mich auch gewundert. dran liegts also auch ned.
|
Hm, dann weiß ich auch nicht weiter :(
Probier einmal das Script vom Link aus, dann können wir wenigstens den Fehler eingerenzen. Sloter |
@fragensteller
warum willst du das denn unbedingt über die ftp funktionen von php machen?
wenn du eh nur ein paar bilder raufladen willst kannst du das ja auch mit der copy funktion machen, ein beispiel das perfekt fuer dich ist findest du hier habe auch schon 2 so script gemacht, eines mit den ftp funktionen und eines ohne ftp. haben beide funktioniert, schau dir mal das obere script an und versuch es so zu machen, wenn nicht kann ich dir ja mal den source geben der mit den ftp funktionen arbeitet. -zeke |
denkfehler bei ftp_put
mittlerweile glaube ich zu wissen, wo das problem liegt.
bei ftp_put findet ein upload über ftp von einer quelle auf einen server von einem client ausgehend statt, die parameter sind der quellenpfad und der zielpfad, die funktion wird jedoch am client ausgeführt, da ja nur dort der quellenpfad bekannt ist. die funktion move_uploaded_file oder eben auch copy bedeutet für das auf dem server ausgeführte (wie in meinem fall) script, daß ein file nicht gesendet, sondern geholt wird (aus der sicht des servers, wo das script ja ausgeführt wird), die übergabeparameter sind wieder ein quellenpfad und ein zielpfad, wobei ersterer diesmal nicht am server gesucht wird, sondern am client. also genau das, was ich brauche. mein fehler lag nun darin, daß ich die funktionalität von copy mit der von ftp_put verwechselt habe und mich gewundert habe, warum der lokale pfad nicht gefunden wurde, wenn ich das script vom server aus ausgeführt habe, nona, am server gibts diesen pfad ja nicht! wenn ein script mit ftp_put dort ausgeführt wird, dann nur, weil von dort woanders hin etwas geloadet werden soll, nicht wenn etwas geholt werden soll. es ist auch d.h. nicht verwunderlich, wenn das script gefunzt hat, wenn ichs testhalber von meinem eigenen server laufen ließ, weil dort ja der lokale pfad existierte, aber trotzdem natürlich die funktion ftp_put für meine anwendung nicht die richtige ist. bin ziemlich zuversichtlich, daß das mein fehler ist, werds dann mal ausprobieren, wenn ich zeit hab. |
| Alle Zeitangaben in WEZ +2. Es ist jetzt 09:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag