move_uploaded_file ei toimi palvelimella

Alla on kuvien uppimiseen tarkoitettu skripti. Move_uploaded_file ei jostain syystä siirrä kuvatiedostoa uuteen kansioon.

Uppiminen siis onnistuu, mutta tiedosto ei koskaan siirry oikeaan kansioonsa. Permissiot ovat oikein sekä lähettävässä- että kohde-kansiossa. Mikä tässä mättää?






//Maximi koko tähän. Esim. 350000 = 350kb.
$max_koko = 350000;
$nimi = $_POST['nimi'];
$linkki = $_POST['linkki'];
//Tarkastetaan päätteet ja tiedoston lähetys
if(isset($_POST["lahetys"]))
{
   if((!empty($_FILES["uploaded_file"])) && ($_FILES["uploaded_file"]['error'] == 0))
   {
      //Tarkastetaan kuva (koko ja pääte)
      $filename = basename($_FILES['uploaded_file']['name']);
      //Haetaan pääte
      $ext = substr($filename, strrpos($filename, '.') 1);
      
      //Tarkastetaan mime-tyyppi
      if (($ext == "jpg" || $ext == "jpeg") && ($_FILES["uploaded_file"]["type"] == "image/jpeg") && ($_FILES["uploaded_file"]["size"] < $max_koko) || ($ext == "gif") && ($_FILES["uploaded_file"]["type"] == "image/gif") && ($_FILES["uploaded_file"]["size"] < $max_koko) || ($ext == "png") && ($_FILES["uploaded_file"]["type"] == "image/png") && ($_FILES["uploaded_file"]["size"] < $max_koko))
      {
         //Valitaan paikka johon tiedosto tallennetaan
         $newname = realpath("../kuva/uusi_").$filename;
         
      //$newname = dirname(__FILE__).'../kuva/'.$filename;
      //Tarkastetaan, onko tiedosto jo serverillä
      if (!file_exists($newname))
         {
   
            if ((move_uploaded_file($_FILES['uploaded_file']['tmp_name'],$newname)))
            {
               
               $sql_lauseke = "insert into kuva(nimi,linkki, tiedostonimi) values ('$nimi','$linkki', 'uusi_$filename')";
               
               if(!$kysely = mysql_query($sql_lauseke))
               {
                  print "Haku epäonnistui. Virhe:".mysql_error();
               }
               else
               {
         print "Lähetys onnistui!";
   
               }
      }
            else
            {
         print "Virhe: Lähetyksen aikana tapahtui virhe!";
         }
      }
         else
         {
      print "Virhe: Tiedosto ".$_FILES["uploaded_file"]["name"]." on jo olemassa.";
      }
      }
      else
      {
      print "Virhe: Vain .jpg, .png ja .gif -päätteiset tiedostot kelpaavat. Max. koko on 350kb. ";
      }
   }
   else
   {
      print "Virhe: Tiedostoa ei lähetetty!";
   }
}
2408
Äänestä

Muut lukivat myös

Vastaukset 2

Vanhimmat

Oudointa on, ettei php anna minkäänlaista ilmoitusta tiedonsiirron epäonnistumisesta, vaikka lisäisinkin skriptiin .mysql_error(); ......

Äänestä

Ainakin tiedoston polussa näyttäisi olevan vikaa koska käytät siinä realpath-funktiota, joka poistaa relatiiviset viittaukset.

"Oudointa on, ettei php anna minkäänlaista ilmoitusta tiedonsiirron epäonnistumisesta, vaikka lisäisinkin skriptiin .mysql_error()"

- Funktio [move_uploaded_file] palauttaa joko true tai false sen mukaan, onnistuiko tiedoston siirto vai ei. mysql_error - funktiolla ei ole mitään tekemistä tämän asian kanssa.

Äänestä

Kommentoi aloitusta


Argh! kirjoitti:

Alla on kuvien uppimiseen tarkoitettu skripti. Move_uploaded_file ei jostain syystä siirrä kuvatiedostoa uuteen kansioon.

Uppiminen siis onnistuu, mutta tiedosto ei koskaan siirry oikeaan kansioonsa. Permissiot ovat oikein sekä lähettävässä- että kohde-kansiossa. Mikä tässä mättää?






//Maximi koko tähän. Esim. 350000 = 350kb.
$max_koko = 350000;
$nimi = $_POST['nimi'];
$linkki = $_POST['linkki'];
//Tarkastetaan päätteet ja tiedoston lähetys
if(isset($_POST["lahetys"]))
{
   if((!empty($_FILES["uploaded_file"])) && ($_FILES["uploaded_file"]['error'] == 0))
   {
      //Tarkastetaan kuva (koko ja pääte)
      $filename = basename($_FILES['uploaded_file']['name']);
      //Haetaan pääte
      $ext = substr($filename, strrpos($filename, '.') 1);
      
      //Tarkastetaan mime-tyyppi
      if (($ext == "jpg" || $ext == "jpeg") && ($_FILES["uploaded_file"]["type"] == "image/jpeg") && ($_FILES["uploaded_file"]["size"] < $max_koko) || ($ext == "gif") && ($_FILES["uploaded_file"]["type"] == "image/gif") && ($_FILES["uploaded_file"]["size"] < $max_koko) || ($ext == "png") && ($_FILES["uploaded_file"]["type"] == "image/png") && ($_FILES["uploaded_file"]["size"] < $max_koko))
      {
         //Valitaan paikka johon tiedosto tallennetaan
         $newname = realpath("../kuva/uusi_").$filename;
         
      //$newname = dirname(__FILE__).'../kuva/'.$filename;
      //Tarkastetaan, onko tiedosto jo serverillä
      if (!file_exists($newname))
         {
   
            if ((move_uploaded_file($_FILES['uploaded_file']['tmp_name'],$newname)))
            {
               
               $sql_lauseke = "insert into kuva(nimi,linkki, tiedostonimi) values ('$nimi','$linkki', 'uusi_$filename')";
               
               if(!$kysely = mysql_query($sql_lauseke))
               {
                  print "Haku epäonnistui. Virhe:".mysql_error();
               }
               else
               {
         print "Lähetys onnistui!";
   
               }
      }
            else
            {
         print "Virhe: Lähetyksen aikana tapahtui virhe!";
         }
      }
         else
         {
      print "Virhe: Tiedosto ".$_FILES["uploaded_file"]["name"]." on jo olemassa.";
      }
      }
      else
      {
      print "Virhe: Vain .jpg, .png ja .gif -päätteiset tiedostot kelpaavat. Max. koko on 350kb. ";
      }
   }
   else
   {
      print "Virhe: Tiedostoa ei lähetetty!";
   }
}

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu