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
642
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
Riikka Purra haluaa muuttaa
maahanmuuttopolitiikkaa. Me suomalaiset halutaan, että Riikka Purra muuttaa pois suomesta eikä tuu ikinä takas....23010172Onnea Riikka! Työttömyys aste on nyt täysi kymppi!
🎯 💪 Kiitoksia Riikalle ansiokkaasta työstä Suomen kansantalouden tuhoamisessa. V.Putin suljetun rajan tuolla puolen604704Hyvällä tuurilla Suomen väkiluku nousee 7 miljoonaan
Vuoteen 2050 mennessä, mikäli onnistumme maahanmuuttopolitiikassa hyvin. Näin analysoi väestötieteen tohori Hiilamo. ht1424174Riikka jytkytti työttömyyden uuteen ennätykseen!
Erinomaista työtä jälleen kerran irvistelevältä saksiniekalta. ”Yhtä korkeaa työttömyysastetta ei löydy työvoimatutkimu1424086- 2153889
Päivän Riikka: Valmet Automotive aloittaa jättimäiset muutosneuvottelut
😭😭😭😭😭😭😭 Tämäkin vielä, Brutukseni. Että ei olisi Suomen historian pahimmat työttömyysluvut riittäneet, niin Riik463204Aamun Riikka: sakset tiputtavat 31 000 lasta köyhyysrajan alle
✂️ STM:n tuoreen arvion mukaan Riikan leikkaukset pudottavat peräti 31 000 lasta köyhyysrajan alle, kun aikaisempi THL392455Kolmepäiväinen työviikko on kulman takana
Zoomin toimitusjohtajan mukaan tekoäly alkaa olla monissa työtehtävissä niin tehokas, että ihmiset voivat pudottaa työpä12245Nuoret pois politiikasta!
Näillä 30-kymppisillä ei ole juuri mitään elämänkokemusta. Ja tällaiset raakileet saavat huseerata ja pilata Suomen!181779Rakastan sua mutten uskalla jutella sulle
Kumpa sä näkisit tämän viestin❤️ Kaipaan sua vaikka oot välillä ihan lähellä mutten saa sanottua sulle enää mitään. Ujos1601723