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) . "\"");
kuva netistä omalle koneelle headereilla
3
687
Vastaukset
- 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
Ruotsissa uusi vakava ongelma: Vanhusten seksuaalinen hyväksikäyttö
palvelutaloissa ja kotihoidossa. Tämäkin on ihan puhtaasti väärän maahanmuuton vaikutusta, sillä tekijät ovat kaikki keh932255Työeläkkeiden maksaminen lopetettava ASAP.
"Vanhimmat sukupolvet ovat saaneet vastinetta eläkemaksuilleen moninkertaisesti nykyisiin ja tuleviin sukupolviin verr1561848- 1761393
- 234845
- 62769
Järkytys uutisten ystäville - Huomenta Suomen kesään iso muutos
Huomenta Suomi on monen suomalaisen vakio-ohjelma. Suorana nähtävä Huomenta Suomi seuraa päivän tärkeimpiä uutisia, pol11766- 65764
- 55662
Trumpille jälleen voitto
Trump ensin tuhosi Iranin ydinohjusprojektin, jotta ko. terroristivaltio ei voisi aiheuttaa ydinsotaa. Ja nyt Trump pako212633Haluan teidät molemmat elämääni
Toista rakastan todella syvästi, ja toinen on kuin paras ystävä minulle. En voi luopua kummastakaan... </349591