Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: [PHP & MySQL] Kuvanlisäys -sivun ongelma

combo [02.02.2011 15:06:17]

#

Kuvanlisäyksessä on ongelma. Kuvat eivät lataudu palvelimelle ja sivulla, joka luo pikkukuvan (Location: http://xxxxxxxxxx.net/galleria/kuvat/thumb.php?kuva={$id}.jpg) tulee tällainen virheviesti:

"Warning: getimagesize(24.jpg) [function.getimagesize]: failed to open stream: No such file or directory in /home/intxxxx/public_html/ilmera/galleria/kuvat/thumb.php on line 9"

Tässä upload.php:

<?php ob_start() ?>
<?php

//muodostetaan yhteys tietokantapalvelimeen
$yhteys = mysql_connect("localhost", "intxxx_xxx", "xxxxx") or die("Yhdistäminen ei onnistunut!");
//valitaan tietokanta
mysql_selectdb("intxxxx_kgalleria", $yhteys) or die("Tietokantaa ei löytynyt!");

//haetaan tietokannan suurin kuvan id-numero
$kysely = "SELECT MAX(ID) FROM galleria";
$haku = mysql_query($kysely, $yhteys);
$id = mysql_result($haku, "0");
//lisättävän kuvan id-numero
$id = $id + 1;

//////////////////////////////////////
// Kuvan lähetys /////////////////////
//////////////////////////////////////

//Tiedoston suurin sallittu koko (kt)
$max_size = 5000000;

//Minne kuvat kopioidaan
$hakemisto = "/home/intxxxx/public_html/ilmera/galleria/kuvat/";

function uploadimg() {

        global $hakemisto;
        global $max_size;
        global $logging;
        global $id;

        $file_size     = $_FILES['file']['size'];
        $file_name     = $_FILES['file']['name'];
        $file_tmp_name = $_FILES['file']['tmp_name'];
        $file_type     = $_FILES['file']['type'];

        //Tarkistetaan onko tiedosto jo olemassa
        if (file_exists("$hakemisto" . "$file_name")) { die("Samanniminen tiedosto on jo ladattu!"); }

        //Tarkistetaan onko annettu tiedosto liian suuri
        if ((int)$file_size > (int)$max_size) { die("Tiedoston koko on liian suuri! Suurin sallittu koko on " . $max_size . " tavua."); }


        //Tarkistetaan onko annettu tiedosto oikean tyyppinen
        $type = explode("/", $file_type);
        $type = $type[0];
        if ($type != "image") { die("Tiedosto ei ole kuva"); }

        //Siirretään tiedosto hakemistoon ja nimetään kuvan id:n mukaiseksi
        move_uploaded_file ($file_tmp_name, $hakemisto . $id . ".jpg");
        echo "Kuva on lisätty onnistuneesti!";
}

if ($file) {
        uploadimg();
}

//otetaan talteen lähetetyt tiedot

$kuvaaja = $_POST['kuvaaja'];
$kuvateksti = $_POST['kuvateksti'];
$paiva = $_POST['pp'];
$valtio = $_POST['valtio'];
$paikka = $_POST['paikka'];
$liikennepaikka = $_POST['liikennepaikka'];
$rataosa = $_POST['rataosa'];
$vesistö = $_POST['vesistö'];
$satama = $_POST['satama'];
$lentokenttä = $_POST['lentokenttä'];

//otetaan talteen aika, jolloin kuva lähetettiin
$aika = time();

//lisätään tiedot tietokantaan
$kysely = "INSERT INTO galleria SET id = '$id', lisäysaika = '$aika', kuvaaja = '$kuvaaja', kuvauspäivä = '$paiva', kuvateksti = '$kuvateksti', valtio = '$valtio', kuvauspaikka = '$paikka', liikennepaikka = '$liikennepaikka', rataosa = '$rataosa', satama = '$satama', vesistö = '$vesistö', lentokenttä = '$lentokenttä'";

//suoritetaan kysely
$haku = mysql_query($kysely, $yhteys);

//ohjataan sivulle, joka luo pikkukuvan ./kuvat/thumbs -hakemistoon
header("Location: http://xxxxxxxxxx.net/galleria/kuvat/thumb.php?kuva={$id}.jpg");


?>

Hennkka [02.02.2011 15:32:17]

#

Oletko tarkistanut, että kuva on siellä missä pitäisi? On myös yleensä turhaa ottaa id talteen ja lähettää takaisin MySQL:älle, jos id on asetettu oikein eli id INT PRIMARY KEY AUTO_INCREMENT. Kannattaisi varmaan nimetä tiedostot jollain toisella tavalla, esim.

$tiedosto = md5(uniqid());
//tai
$tiedosto = md5($aika);
//tai
$tiedosot = md5($file_tmp_name);

combo [02.02.2011 17:06:02]

#

Hennkka kirjoitti:

Oletko tarkistanut, että kuva on siellä missä pitäisi?

Mikä kuva? Ongelman ydin on se että kuvia ei pysty lähettämään palvelimelle.

Kaikki muut tiedot tallentuvat, siis ne jotka tallennetaan tietokantaan.

Lebe80 [02.02.2011 18:47:01]

#

Miksi ohjaat käyttäjän sitten sivulle, jos et ole tarkistanut, onko kuvan siirto edes onnistunut.

Eli kaiken järjen mukaan sinun pitäisi tarkistaa aina, onko tiedosto edes siirtynyt, onko tiedosto ollut edes kuva, onko mitään tiedostoa edes lähetetty, yms. yms.

Vasta kun kaikki ehdot ovat toteutuneet siirrät käyttäjän sivulle "joka luo thumbit".

Itse en tuon scriptisi perusteella edes tiedä, missä asetat $file-muuttujalle arvon, onko kenties palvelimella register_globals päällä, vai onko siellä joskus semmoinen ollut?

combo [02.02.2011 19:44:21]

#

Tuo ei ole minun tekemäni. Sain sen eräältä tähän projektiin kuuluvalta.

Taidan tehdä tuon skriptin ihan uudelleen.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta