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
690
Vastaukset 3
- 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
Suomalaisten pinna paloi - Ärsytys iskee uudesta TTK-juontajasta "Eihän tälle voi kun nauraa"
Oliko Veronica Verho hyvä valinta TTK-juontajaksi? Uuden TTK-juontajan henkilöllisyyttä on arvailtu siitä asti, kun Va1202472Mitä tapahtuu?
Mitä tapahtuu Humalojalla? Poliiseja talon ympärillä ja paljon ihmisiä pitkin pihoja???401652Suomi on viittä vaille sodassa Venäjän kanssa...
...syynä tähän on kokoomuslainen presidenttimme Stubb. Hän on ainoa eurooppalaisen maan johtaja, joka kärkkäästi ja taha6551079- 106993
- 71982
- 98926
- 48885
Olen vähän epävarma siitä, oletko kiltti
Nainen, ensivaikutelma oli, että olet tosi hyväsydäminen eli siinä mielessä harvinaisuus. Eli et mene virran mukana, etk83760Herkkä, hellä, aurinkoinen, kaunis upea, valonsäde on hän nainen
Ja myös fiksu, älykäs ja luonnonläheinen. Erittäin mielenkiintoinen ja kiltti ihminen. Haluan tuntea hänet, koska kaik33736- 71728