kuva netistä omalle koneelle headereilla

header

Tavoite: saada selain ehdottamaan kuvan tallentamista suoraan lomakkeen nappia klikkaamalla.
Tiedän toki, että kuvat voi tallentaa myös esim. hiiren kakkosnäppäimen kautta, mutta nyt olisi tarkoitus saada tallennetuksi näin.

Miksi seuraava ei toimi ainakaan localhostilla tai mbnetin servereillä?

$tulosivu = $_SERVER['HTTP_REFERER']; // katsotaan miltä sivulta tultiin, mikäli selain sen kertoo
$lataa = trim($_POST['lataa']);
$tulo = explode("/", $tulosivu);
$polku = "$tulo[0]//$tulo[1]$tulo[2]/$tulo[3]/$tulo[4]/$tulo[5]/$tulo[6]";

// alla oleva on melkein suora kopio joltain foorumilta vuodelta -05, ja tämän "pitäisi" toimia
if (!empty($lataa)) {
$fileDir = "$polku/tiedostot"; // Määritellään polku, ei kauttaviivaa loppuun
$fileName = $lataa; // Tiedostonimi
$fileString=$fileDir.'/'.$fileName; // Polun ja tiedostonimen yhdistelmä
// Muunnetaan tiedostonimet IE:lle kelvollisiksi
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {
$fileName = preg_replace('/\./', '.', $fileName, substr_count($fileName, '.') - 1);
}
header("Cache-Control: "); // Jätetään tyhjäksi IE-ongelmien välttämiseksi
header("Pragma: "); // Jätetään tyhjäksi IE-ongelmien välttämiseksi
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$fileName."\"");
header("Content-length:".(string)(filesize($fileString)));
sleep(1);
fpassthru($fdl);
}

Tällä saan Firefoxissa avautumaan "tallenna nimellä"-valikon, mutta isokin tiedosto tulee koneelle selvästi viallisena alle kilotavun kokoisena, eikä sitä saa auki. IE tai Opera eivät tee mitään. $fileString tulostaa aivan oikean ja toimivan osoitteen muotoa "http://*.*.*/*/*/*/*/tiedostot/kuva.jpg", jossa kuva oikeastikin on.

Olen kokeillut myös näitä yhtä heikolla menestyksellä:
1. header ("Content-Type: image/jpeg");
header ("Content-Disposition: attachment; filename=".($lataa).";");
header("Content-Length: ".filesize($lataa));
header("Connection: Close");
readfile($file);
exit;

2. $lataa = $tulosivu.$lataa;
header("Content-type: image/jpeg");
header("Content-Disposition: attachment; filename=\"" . ($lataa) . "\"");

3

681

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • keksa1

      • header

        Kokeilin ensin noita esimerkkejäsi, en saanut niilläkään toimimaan oikein. Seuraavaksi muutin koodin tällaiseksi:

        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT\n");
        header ("Content-Type: image/jpg");
        header ("Content-Disposition: attachment; filename=".($lataa).";"); // $lataa tulee lomakkeelta
        header("Content-Length: ".filesize($lataa));
        header("Connection: Close");
        @readfile($fileString);
        exit;

        Nyt tiedoston koko on suunnilleen oikea, mutta kuvaa ei saa auki: "Valokuvavalikoima ei voi avata tätä kuvaa tai videota. Tiedosto on vahingoittunut." Virtualdubin heksaeditorilla katsottuna tiedosto ei ole pelkkää nollaa täynnä. Mukana on myös jotain selväkielistä valitusta jo lähetetyistä headereista php-tiedoston kommentilla piilotetulla rivillä. Mikähän tässä voisi olla vielä pielessä?


    • header

      IE ja Opera eivät toimi kuvien poistossa sen takia, ettei lomakkeella välity tieto eteenpäin. Tämän takia ajattelin kokeilla sessiota. Siinä tuli sitten uusi ongelma, eli missä kohdassa session arvo syötetään, että siihen tulee vain valittu tiedoston nimi?

      while ($file = readdir($dir_handle))
      {
      if($file!="." && $file!="..") // ei tulosteta pelkkiä pisteitä
      {
      if (strpos($file, '.jpg') >0)
      {
      echo '[tr][td][a href="'.$file.'" target="oikea"]'.$file.'[/a][/td][td][input type="image" src="lataa.gif" name="lataa" value="'.$file.'" '.$_SESSION['kuva'] = $file.'][/td][td][input type="image" src="delete.gif" name="kuva2" value="'.$file.'"][/td][/tr]';
      }
      }
      }

      Ainakaan tuo ei tuota odotettua tulosta, vaan session sisällöksi tulee kansiossa viimeisenä oleva tiedosto. Jos taas käytän $_SESSION['kuva'][] , niin silloinhan sessioon tulee kaikki kansiossa olevat tiedostot. Missä kohdassa ja muodossa siis session sisältöön pitäisi kirjoittaa?

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Orpo räyhää: kansan on muututtava

      Orpon mukaan kansa ei elä kokoomuksen kanssa samassa todellisuudessa, ja sen vuoksi kansan on muututtava. Kas kun ei san
      Maailman menoa
      263
      3291
    2. Muovikassikartelli

      Kauppaketjut ovat yhdessä sopineet muovikassin yksikköhinnaksi 59 senttiä. Milloin viranomaiset puuttuvat tähän kartell
      Talousrikokset
      20
      1819
    3. Aidon persun tunnistaa Marinin palvonnasta

      Oli kyse sitten Halla-ahosta tai Putinista. Ensimmäisenä aidolle persulle tulee mieleen Marin.
      Maailman menoa
      24
      1489
    4. Mikä tekee sen

      Vetovoiman kaivatussasi?
      Ikävä
      81
      1334
    5. Harmittaako joku

      Harmittaako joku asia tai asiat, mitä on tapahtunut tai jäänyt tapahtumatta?
      Ikävä
      137
      1028
    6. Miksi et vain uskalla!?

      On niin ikävä...
      Ikävä
      81
      984
    7. Hallintooikeus..

      "Asemakaavapäätös pysyy voimassa.Poikkeamista ja rakentamista koskevat luvat hylättiin" kertoo Pyhäjärven Sanomat netti.
      Pyhäjärvi
      61
      799
    8. Olen rakastunut

      varattuun joka ei eroa. Miten tunteista eroon? Tämä ei ole tavanomaista. On elämäni suuri rakkaus.
      Ikävä
      86
      736
    9. Jos se joskus oli molemminpuolista

      niin hyvin me molemmat onnistuttiin pitämään toinen epätietoisena.
      Ikävä
      60
      658
    10. Laita nyt se viesti

      Tiedän että haluat tavata. Kirjoitat, pyyhit, kirjoitat... Lähetä se viesti 😗
      Ikävä
      50
      626
    Aihe