Avatar billede old-faithful Praktikant
18. februar 2007 - 13:47 Der er 20 kommentarer og
1 løsning

PHP upload uden formular (men med GET i URL)?

Hej!

Er der nogen der har et forslag til hvordan man kan lave en fil-uploader i PHP uden at bruge en formular. Jeg vil gerne uploade noget ved kun at bruge en URL (med GET variabler i), hvis det er muligt.

Ideen er at brugeren indtaster f.eks. "http://www.minside.dk/upload.php?fil=C:\Minfil\fil.jpg" hvorefter denne fil på brugerens computer uploades, hvis den findes. Hvis filen allerede findes på webserveren, skal den blot overskrives.

En evt. adgangskode hertil er ikke et problem. Det er altså fil-upload delen, jeg ønsker hjælp til.
Avatar billede fixxxer Nybegynder
18. februar 2007 - 14:09 #1
Det kan jeg ikke i min vildeste fantasi forestille mig, at det kan lade sig gøre.

Den eneste løsning, tror jeg, er at lave et ActiveX program der gør det, der er ikke noget indarvet i HTTP-protekollen der kan gøre det.
Avatar billede intenz Novice
18. februar 2007 - 14:22 #2
Tvivler også meget stærkt på det kan lade sig gøre. Ellers kunne man jo bare lægge en ville fil med http://www.minside.dk/upload.php?fil=C:\Bank\sikkerhednoegle.xxx altså man ville kunne stjæle alt muligt uden en bruger ville vide det.

Er ret sikker på den skal komme fra en formular med et felt af typen file.
Avatar billede old-faithful Praktikant
18. februar 2007 - 15:17 #3
Har I alternativt et forslag til hvordan/om man kunne sætte et PHP-script til at uploade den samme fil med et interval på nogle sekunder, således at man kun skal submitte en formular én gang og uploadprocessen så gentages indtil man afbryder den?
Avatar billede wanze Nybegynder
19. februar 2007 - 00:25 #4
Nej, det er heller ikke muligt. Når du submitter, så uploader den. Det kan du ikke bare blive ved med.

Hvis du forklarer helt præcist, hvad du skal bruge det til, så kan det være vi kan finde en anden løsning.
Avatar billede old-faithful Praktikant
19. februar 2007 - 01:15 #5
Jeg gik bare og spekulerede på, om man ville kunne lave en slags VNC (dog kun med visning af skærmbillede), hvor klienten udelukkende skal bruge et program, som automatisk uploader til et websted via PHP.

Fidusen skulle være at der var næsten ingen opsætning og at man slipper for NAT-problemer (port forwarding) ved kun at have udgående trafik. FTP ville formentlig ikke være holdbart, da man så ville risikere at få loginoplysningerne kompromitteret.

Men PHP er åbentbart ikke løsningen, kan jeg høre på det hele :-)
Avatar billede hans_ch Nybegynder
20. februar 2007 - 23:40 #6
Jeg ved ikke om man kan have en formular som sender via POST til en anden frame (evt. en skjult iframe). Så kan man vel med JavaScript køre en submit med et antal sekunders mellemrum??
Avatar billede fixxxer Nybegynder
21. februar 2007 - 08:01 #7
Der er meget begrænset mulighed for at scripte på et input af typen "file".

Så om det ligger i en iframe eller andet spiller ingen rolle, i min vurdering.
Avatar billede hans_ch Nybegynder
21. februar 2007 - 09:36 #8
Nej, men hvis man sender en formular til en anden frame, bliver formularen vist ikke tømt. Dvs. hvis man vælger billedet første gang i et "file" felt, så burde JavaScript vel kunne sende formularen igen og igen og igen...
Avatar billede fixxxer Nybegynder
21. februar 2007 - 12:35 #9
Hvordan vil du sende en formular til en iframe?
Avatar billede fixxxer Nybegynder
21. februar 2007 - 12:40 #10
Jeg kan se at der en target-attribut til form-elementet, så det kan være at du har fat i noget.. Jeg har dog ikke prøvet det.
Avatar billede hans_ch Nybegynder
21. februar 2007 - 13:01 #11
Her er et fungerende eksempel:

form.html:
---------------
<script type="text/javascript">
var counter = 1;

function send(){
    if(timerID){
        clearTimeout(timerID);
    }
    counter++;

    document.getElementById("counter").value = counter;
    document.getElementById("testForm").submit();

    timerID = setTimeout("send()", 3000);
}

function startTimer(){
    timerID = setTimeout("send()", 3000);
}

function stopTimer(){
    clearTimeout(timerID);
}
</script>
</HEAD>

<BODY>
<iframe name=hiddenFrame></iframe>
<form action="postResults.php" id="testForm" target=hiddenFrame method=POST enctype="multipart/form-data">
    Navn:<br /><input type="text" name="navn" value="John">
    <br /><br />
    Fil:<br /><input type="file" name="fil">
    <br /><br />
    Tæller:<br />
    <input type="text" name="counter" id="counter" value="1">
    <br /><br />
    <input type="submit" onclick="startTimer()" value="Send">&nbsp;<input type="button" value="Stop" onclick="stopTimer()">
</form>
</BODY>
----------

postResults.php:
----------
<?
echo 'Hej '.$_POST["navn"].'! (Tæller: '.$_POST["counter"].')<br /><br />';
readfile($_FILES['fil']["tmp_name"]);
?>

Hans
----------
Avatar billede hans_ch Nybegynder
21. februar 2007 - 13:02 #12
For god ordens skyld skal jeg lige sige at filerne skal ligge i samme mappe på et hotel med PHP...
Avatar billede old-faithful Praktikant
21. februar 2007 - 13:55 #13
Det ser interessant ud.

Jeg har ikke den store erfaring med PHP upload. Ville ovenstående også uploade en fil og gemme en kopi på serveren?
Avatar billede fixxxer Nybegynder
21. februar 2007 - 14:00 #14
move_uploaded_file() er nok interessant i den sammenhæng.
Avatar billede hans_ch Nybegynder
21. februar 2007 - 16:13 #15
Så brug i stedet dette i postResults.php:

<?
echo 'Hej '.$_POST["navn"].'! (Tæller: '.$_POST["counter"].')<br /><br />';
readfile($_FILES['fil']["tmp_name"]);

if(move_uploaded_file($_FILES['fil']["tmp_name"], "fil.txt")){
    //Filen er uploaded
}else{
    //Der er sket en fejl
}
?>


----------

fil.txt kan udskiftes med stien filen skal lægges - f.eks. 'images/'.$username.'.jpg'
Avatar billede old-faithful Praktikant
21. februar 2007 - 16:46 #16
Tak, jeg vil lige prøve og kigge på det og så melde tilbage.
Avatar billede old-faithful Praktikant
21. februar 2007 - 18:17 #17
Hans_ch> Det virker faktisk udmærket når man lige har rettet tingene til. Eneste hage er at brugeren selv skal trykke på gennemse og vælge filen og så trykke på submit.

Ved du om der er nogle måde, evt. via JavaScript, som man kan bruge til at indsætte stien (filnavnet kan sendes via en GET, fra det computerprogram jeg bruger) automatisk og trykke på submit derefter? Eller er det en "sikkerhedsrisiko" og derfor umuligt?
Avatar billede hans_ch Nybegynder
21. februar 2007 - 23:06 #18
Det er vist ikke muligt. Jeg har ikke kunnet gøre det på nogen måde i hvert fald ;) Det ville også være en for stor risiko.

Hans
Avatar billede old-faithful Praktikant
22. februar 2007 - 00:45 #19
Jeg takker for hjælpen. Jeg har forhøjet pointsatsen til 30 point. Hans og fixxxer læg venligst svar.
Avatar billede fixxxer Nybegynder
22. februar 2007 - 08:20 #20
Du kan netop ikke scripte på file-feltet af sikkerhedsmæssige årsager.

Jeg afstår point, da jeg synes at det er hans_ch der har fremlagt løsningen.
Avatar billede hans_ch Nybegynder
22. februar 2007 - 08:31 #21
Det var så lidt! Her er et svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester