Degeim Skrevet 11. mai 2006 Del Skrevet 11. mai 2006 Jeg trenger altså et enkelt eksempel på hvordan jeg kan laste opp en fil fra en hvilken som helst datamaskin, til en FTP-server, ved å skrive følgende i banene i en webbrowser: http://[server]/ [php-fil]?fil=[fil]Eksempel: http://www.home.no/lastopp.php?fil=C:\Tekst.txt Vil laste opp "C:\Tekst.txt" til en FTP-server som er forhåndsbestemt i scriptet. Er også en fordel hvis jeg med "?slett" (i stedet for "?fil") kan slette filen fra serveren (så sant den eksisterer). Filen kommer til å være på mindre enn 10kb. Er dette mulig? Hvis jeg må bruke mysql, så er jeg også takknemlig hvis noen bidrar med komplett eksempel på hvordan jeg setter opp denne og får den til å virke med scriptet (jeg har serverplass på awardspace.com). Takk, Degeim Lenke til kommentar
hockey500 Skrevet 11. mai 2006 Del Skrevet 11. mai 2006 (endret) lag deg et standard uploadscript som benytter seg av ftp_connect(), ftp_login(), ftp_put() og ftp_close(). Aldri gjort det før, men når jeg ser på php dokumentasjonen ser det ikke vanskelig ut http://no2.php.net/ftp Endret 11. mai 2006 av hockey500 Lenke til kommentar
Joakim Gjerde Skrevet 12. mai 2006 Del Skrevet 12. mai 2006 Hvis filen skal lastes til samme server som scriptet ligger på er det ikke noe problem. Send PM, hvis du vil ha et script av meg.. Mvh Joakim Gjerde Lenke til kommentar
trondes Skrevet 12. mai 2006 Del Skrevet 12. mai 2006 Du kan nå legge ut scriptet her, sikkert flere som kan ha intresse av noe slikt. Ha en fin natt Lenke til kommentar
blackbrrd Skrevet 12. mai 2006 Del Skrevet 12. mai 2006 Intuisjonen min sier at du ikke kan laste opp filer hvis ikke et form med en upload knapp blir brukt. Grunnen er egentlig ganske enkel, den filen der kunne f.eks enkelt vært byttet ut med filen som inneholder passordet til alle brukerene. Deretter lager man en link som ser ut som noe helt annet og får folk til å trykke på den... Lenke til kommentar
Vial Skrevet 12. mai 2006 Del Skrevet 12. mai 2006 <?php if(!empty($_GET["file"])) { if(is_file($_GET["file"])) { $host = "ftp.server.com"; $username = "username"; $password = "password"; $port = 21; $connection = ftp_connect($host, $port, 500); $login = ftp_login($connection, $username, $password); if(!empty($login)) { print("Connected to $host!"); $filename = $_GET["file"]; $upload = ftp_put($connection, $filename, $filename, FTP_BINARY); if(!$upload) { print("Could not upload file"); } else { print("File uploaded successfully to $host"); } } else { print("Could not connect to host!"); } ftp_close($connection); } } ?> Lenke til kommentar
Degeim Skrevet 13. mai 2006 Forfatter Del Skrevet 13. mai 2006 Hva skriver jeg i adressefeltet for å få scriptet ditt til å virke, Vial (feks hvis jeg vil laste opp "C:\Fil2.xml"). Takk, Degeim Lenke til kommentar
Vial Skrevet 15. mai 2006 Del Skrevet 15. mai 2006 (endret) Hva skriver jeg i adressefeltet for å få scriptet ditt til å virke, Vial (feks hvis jeg vil laste opp "C:\Fil2.xml"). Takk, Degeim 6094806[/snapback] Parameter er file, så hvis du vil laste opp c:\fil2.xml kaller du: http://localhost/small_projects/uploadFileFTP.php?file=c:\fil2.xml Husk å erstatte $host, $username og $password med riktige variabler. Endret 15. mai 2006 av Vial Lenke til kommentar
Degeim Skrevet 15. mai 2006 Forfatter Del Skrevet 15. mai 2006 (endret) Nå caller jeg med: http://www.dataslurf.net/psibasoft/lastopp/lastopp.php?file=c:\glosar.xml Har også prøvd http://www.dataslurf.net/psibasoft/lastopp/lastopp.php?file=c:/glosar.xml Her følgende script: <?php if(!empty($_GET["file"])) { if(is_file($_GET["file"])) { $host = "ftp.dataslurf.net"; $username = "[sensurert]"; $password = "[sensurert]"; $port = 21; $connection = ftp_connect($host, $port, 500); $login = ftp_login($connection, $username, $password); if(!empty($login)) { print("Connected to $host!"); $filename = $_GET["file"]; $upload = ftp_put($connection, $filename, $filename, FTP_BINARY); if(!$upload) { print("Could not upload file"); } else { print("File uploaded successfully to $host"); } } else { print("Could not connect to host!"); } ftp_close($connection); } } ?> Og mappen dette ligger i er CHMODet til 777. Filen er på 1kb. Jeg har testet i IE og FireFox. Begge nyeste versjoner. Når jeg går på adressen over, kommer det kun blank skjerm. Hvorfor? Takk, Degeim --EDIT -- På awardspace sine servere får jeg følgende feil når jeg prøver: Error 500: Script Execution Failure Description: The server encountered an internal error or misconfiguration and was unable to complete your request. Most common reasons for returning this error message are: • File Upload Mode When you upload Perl, CGI scripts via FTP you should use always ASCII mode. If you get "Error 500: Script Execution Failure" you should check whether your FTP client uses ASCII mode when uploading your scripts, because if it uses BINARY mode to upload your scripts they won't work on the server. The problem caused by wrong upload mode is associated with the way different operating systems handle the "end of line" character. Unix system uses a "line-feed" (LF), Windows uses a "carriage-return" (CR) and "line-feed" (LF) pair. That's why it is very important that you set the uploading mode to ASCII. • File Permissions When you upload scripts via FTP the file permissions are set by default to 755. If you get "Error 500: Script Execution Failure" you should check whether your scripts have 755 permissions. Otherwise your scripts have lower level of permissions and does not support execution upon request. The octal representation of the 755 permission is equal to the following textual format: -rwxr-xr-x Most FTP clients support the CHMOD command which is used for setting file permissions. In case you have set improper permissions to your scripts, use your FTP client and set "Read, Write, Execute" permissions for the owner, "Read, Execute" permissions for the group and everyone else. • Script Errors This is the third well known reason for getting "Error 500: Script Execution Failure" upon execution of your scripts. Check your scripts for any obvious syntax or programming errors to make sure your code is not broken. Remember: When you get a "Error 500: Script Execution Failure", you should always check for any file uploading problems (ASCII/BINARY) and the executable permission settings. Once those are checked and verified, it looks like there is a syntax error or some other problem in the script. Endret 15. mai 2006 av Degeim Lenke til kommentar
hockey500 Skrevet 15. mai 2006 Del Skrevet 15. mai 2006 jeg er helt blank på dette området, men noen servere krever vel at du allokerer plass til fila først med ftp_alloc()? prøvd å bytte ut FTP_BINARY med FTP_ASCII i ftp_put() funksjonens siste parameter? Lenke til kommentar
Degeim Skrevet 15. mai 2006 Forfatter Del Skrevet 15. mai 2006 (endret) Ja, nå har jeg prøvd det også. Fikk samme feilen. Hvordan bruker jeg alloc? Eksempel? Takk, Degeim Endret 15. mai 2006 av Degeim Lenke til kommentar
blackbrrd Skrevet 15. mai 2006 Del Skrevet 15. mai 2006 (endret) Jeg ser fortsatt ikke hvordan dere har tenkt å få det her til å fungere ved hjelp av en query string. For å laste opp filer så må man bruke et form med enctype satt lik multipart/form-data og og et felt med input type lik file. Det går ikke engang å forhåndsutfylle slike input felter, det må gjøres av brukeren. Det går ikke an å scripte filupload med default innstillinger fra websider med query strings fordi det ville vært stor en sikkerhetsrisiko. Tenk deg om... la oss si at du går inn på en side også trykker på en link og den så blir bygd opp i javascript og sier at du skal uploade filen som inneholder passordene til alle windowsbrukerene. Filen er kryptert, men ikke spesiellt godt, det finnes plenty av programmer som knekker den krypteringen. Jeg kan ikke skjønne hvordan det kan fungere.... Det eneste som blir uploadet når du lager en query string som dette: http://www.dataslurf.net/psibasoft/lastopp...e=c:/glosar.xml er teksten c:/glosar.xml Endret 15. mai 2006 av blackbrrd Lenke til kommentar
ZoRaC Skrevet 15. mai 2006 Del Skrevet 15. mai 2006 Må nok si meg enig med blackbrrd her, det er nok ikke mulig, da dette ville vært en enorm sikkerhets-risiko! Lenke til kommentar
Degeim Skrevet 16. mai 2006 Forfatter Del Skrevet 16. mai 2006 Ja, jeg skjønner hva dere mener. Hvordan ville det fungere hvis jeg sender hele filinnholdet som parameter, og ber php-filen om å lagre det til en fil? Jeg vet det vil gå (bruker teknikken på mindre filer), men hvordan vil det fungere på en slik lang fil? Og hvilke tegn må jeg unngå i filen for at dette skal virke? Takk, Degeim Lenke til kommentar
blackbrrd Skrevet 16. mai 2006 Del Skrevet 16. mai 2006 Det er en begrensning på hvor lange query strings kan være, du får google litt Det enkleste hadde nok vært å uploade filen direkte til ftp'n dog, ser ikke helt poenget med å gå om en webside... Lenke til kommentar
Vial Skrevet 16. mai 2006 Del Skrevet 16. mai 2006 Jeg ser fortsatt ikke hvordan dere har tenkt å få det her til å fungere ved hjelp av en query string. For å laste opp filer så må man bruke et form med enctype satt lik multipart/form-data og og et felt med input type lik file. Det går ikke engang å forhåndsutfylle slike input felter, det må gjøres av brukeren. blablabla... ved å bruke forms får man binærdataen til en fil til å kjøres gjennom en filestream som laster opp dataene og gjør det om til filer igjen på den andre siden. Dette scriptet tar ikke hensyn til sikkerhet men åpner en ftp kobling til en gitt host, sender enkelt og greit fildataene over til default directory (det er nok trolig også feilen, du bør spesifisere directory på serveren. Sjekk med et ftp program hvor filen havner hen). Når filen er lastet opp lukkes tilkoblingen. parameteren file spesifiserer det lokale filnavnet og filnavnet på den andre siden. Her trenger scriptet å tweakes litt. Det bør ordnes slik at den fjerner c:\ fra filnavnet på serversiden. PHP fixer det, men det er ikke noe bra å sette full path. Seff kan du modde scriptet så det laster opp %SystemRoot%\someimportantfile.xxx, men det er en risiko man bare må ta. I utgangspunktet kan enhver php side gjøre akkurat det. Hvordan ville det fungere hvis jeg sender hele filinnholdet som parameter, og ber php-filen om å lagre det til en fil? Jeg vet det vil gå (bruker teknikken på mindre filer), men hv... For å muliggjøre større filopplastinger må du tweake php.ini. Den har en attributt som heter upload_max_filesize på linje 514. Den er default satt til 2MB. Problemet du vil støte på her er at browseren og eller serveren kan time ut når filopplastingene tar veldig mye tid. Lenke til kommentar
blackbrrd Skrevet 16. mai 2006 Del Skrevet 16. mai 2006 Vial, jeg tror han har tenkt å få en fil fra maskin a til å bli kopiert over internet til server b som så kopierer filen over til ftp server c. Du får ikke sendt over filer fra a til b ved hjelp av query strings. Lenke til kommentar
Degeim Skrevet 16. mai 2006 Forfatter Del Skrevet 16. mai 2006 Jeg har kanskje vært litt dum ved ikke å forklare nøyaktig hva dette er. Saken er at jeg utvikler et gloseprøveprogram, der det ikke skal være mulig å jukse (jaja, jeg vet det sannsynligvis ikke går an å lukke alle åpningene, men det er jo ikke hackere som skal ta testen...). Svarene skal bli lastet opp til FTP-server, for så å bli lastet ned til læreren sin datamaskin når han starter opp administrasjonsprogrammet. Så saken er at jeg må ha filene fra den lokale datamaskinen, og så opp på servere. Dette trenger jeg hjelp til. Nedlastingen derifra er i boks. Og jeg har enda ikke funnet ut hvordan jeg skal gjøre det fra VB.Net, så derfor fant jeg ut at jeg kanskje kunne gjøre dette via PHP. Kan jeg egentlig det, og i så fall - hvordan? Takk, Degeim Lenke til kommentar
Vial Skrevet 16. mai 2006 Del Skrevet 16. mai 2006 Jeg har kanskje vært litt dum ved ikke å forklare nøyaktig hva dette er. Saken er at jeg utvikler et gloseprøveprogram, der det ikke skal være mulig å jukse (jaja, jeg vet det sannsynligvis ikke går an å lukke alle åpningene, men det er jo ikke hackere som skal ta testen...). Svarene skal bli lastet opp til FTP-server, for så å bli lastet ned til læreren sin datamaskin når han starter opp administrasjonsprogrammet. Så saken er at jeg må ha filene fra den lokale datamaskinen, og så opp på servere. Dette trenger jeg hjelp til. Nedlastingen derifra er i boks. Og jeg har enda ikke funnet ut hvordan jeg skal gjøre det fra VB.Net, så derfor fant jeg ut at jeg kanskje kunne gjøre dette via PHP. Kan jeg egentlig det, og i så fall - hvordan? Takk, Degeim 6113684[/snapback] Hvorfor ikke ha prøvene og resultatene lagret på serveren? Tror du sparer deg selv MYE tid ved å implementere en MySQL database i dette. Lenke til kommentar
Degeim Skrevet 17. mai 2006 Forfatter Del Skrevet 17. mai 2006 Hvorfor ikke ha prøvene og resultatene lagret på serveren? Tror du sparer deg selv MYE tid ved å implementere en MySQL database i dette. Lagret på serveren? Det er jo det jeg prøver på, om ikke du mener en annen metode? Hvordan får jeg lastet resultatene opp når jeg har MySQL, da? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå