Gå til innhold

Laste opp fil med PHP, utn mysql om mulig


Anbefalte innlegg

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
Videoannonse
Annonse

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

<?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);
}
}
?>

:thumbup:

Lenke til kommentar
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 av Vial
Lenke til kommentar

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 av Degeim
Lenke til kommentar

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 av blackbrrd
Lenke til kommentar

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...