#1 2013-07-27 11:16:26

samson
Člen
Registrován: 2010-08-13
Příspěvky: 24

PHP - neuploaduje do zložky

Ahojte, mám problém s týmto kódom:

<?php

$db = mysql_connect('localhost', 'user', 'password') or
die ('Nemohu se připojit. Zkontrolujte prosím připojení k serveru.');
mysql_select_db('moviesite', $db) or die(mysql_error($db));


$dir ='/obrazky';


if ($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK)
{
  switch ($_FILES['uploadfile']['error']) {
    case UPLOAD_ERR_INI_SIZE:
      die('Velikost přenášeného souboru přesáhla hodnotu ' .
                'upload_max_filesize definovanou v souboru php.ini.');
      break;
    case UPLOAD_ERR_FORM_SIZE:
      die('Velikost přenášeného souboru přesáhla hodnotu MAX_FILE_SIZE ' .
                'určenou ve formuláři HTML.');
      break;
    case UPLOAD_ERR_PARTIAL:
      die('Soubor byl přenesen jen částečně.');
      break;
    case UPLOAD_ERR_NO_FILE:
      die('Nebyl přenesen žádný soubor.');
      break;
    case UPLOAD_ERR_NO_TMP_DIR:
      die('Server nemá k dispozici dočasný adresář.');
      break;
    case UPLOAD_ERR_CANT_WRITE:
      die('Serveru se nepodařilo uložit přenesený soubor na disk.');
      break;
    case UPLOAD_ERR_EXTENSION:
      die('Přenos souboru zastaven doplňkem PHP.');
      break;
  }
}


$image_caption = $_POST['caption'];
$image_username = $_POST['username'];
$image_date = @date('Y-m-d');
list($width, $height, $type, $attr) =
  getimagesize($_FILES['uploadfile']['tmp_name']);


switch ($type) {
  case IMAGETYPE_GIF:
    $image = imagecreatefromgif($_FILES['uploadfile']['tmp_name']) or
    die('Formát přeneseného souboru není podporován.');
    $ext = '.gif';
    break;
  case IMAGETYPE_JPEG:
    $image = imagecreatefromjpeg($_FILES['uploadfile']['tmp_name']) or
    die('Formát přeneseného souboru není podporován.');
    $ext = '.jpg';
    break;
  case IMAGETYPE_PNG:
    $image = imagecreatefrompng($_FILES['uploadfile']['tmp_name']) or
    die('Formát přeneseného souboru není podporován.');
    $ext = '.png';
    break;
  default:
    die('Formát přeneseného souboru není podporován.');
  }


  $query = 'INSERT INTO images (image_caption, image_username, image_date)
            VALUES ("' . $image_caption . '", "' . $image_username . '", "'
           . $image_date . '")';

  $result = mysql_query($query, $db) or die (mysql_error($db));


  $last_id = mysql_insert_id();


  $imagename = $last_id . $ext;



  $query = 'UPDATE images
            SET image_filename = "' . $imagename . '"
            WHERE image_id = ' . $last_id;
  $result = mysql_query($query, $db) or die (mysql_error($db));

  switch ($type) {
    case IMAGETYPE_GIF:
      imagegif($image, $dir . '/' . $imagename);
      break;
    case IMAGETYPE_JPEG:
      imagejpeg($image, $dir . '/' . $imagename, 100);
      break;
    case IMAGETYPE_PNG:
      imagepng($image, $dir . '/' . $imagename);
      break;
    }
    imagedestroy($image);

  ?>
<html>
  <head>
    <title>Zde je váš obrázek!</title>
  </head>
  <body>
     <p>Zde je obrázek, který jste právě odeslali na náš server:</p>
    <img src="obrazky/<?php echo $imagename; ?>" style="float:left;">
    <table>
      <tr><td>Obrázek je uložen jako: </td>
      <td><?php echo $imagename; ?></td></tr>
      <tr><td>Typ obrázku: </td><td><?php echo $ext; ?></td></tr>
      <tr><td>Výška: </td><td><?php echo $height; ?></td></tr>
      <tr><td>Šířka: </td><td><?php echo $width; ?></td></tr>
      <tr><td>Datum uložení: </td><td><?php echo $image_date; ?></td></tr>
    </table>
  </body>
</html>

Tento kód by mal obrázok z formulára spracovať a uložiť na server do zložky obrázky, nahrať informácie do databázy a následne ho zobraziť. Problém je, že obrázok sa nikdy neuloží do zložky obrázky. Do DB sa zapíše všetko ok... Atribúty som nastavil na 777, na servery doma mi to v pohode fungovalo. Je to kód z jednej knihy a naozaj neviem, kde by mohol byť problém.

Ďakujem, samson.

Offline

#2 2013-07-27 21:28:55

abc
Člen
Registrován: 2010-06-28
Příspěvky: 62
Web

Re: PHP - neuploaduje do zložky

skus definovat priecinok bez lomky $dir ='obrazky';

Offline

#3 2013-08-02 22:33:32

samson
Člen
Registrován: 2010-08-13
Příspěvky: 24

Re: PHP - neuploaduje do zložky

Nečakal som že to bude taká malá chyba :-D. Dobre, už to funguje ale mám tu ešte jeden problém-neviem či to budem vedieť dobre vysvetliť ale:
Mám klasický skript na nahratie obrázku na server, to prebehne v pohode. Potom mám skript, ktorý obrázok zobrazí a pridá možnosti úpravy obrázku:


<?php
// pøipojení k databázi MySQL
$db = mysql_connect('localhost', 'meno', 'heslo') or
  die ('Nemohu se pøipojit. Zkontrolujte prosím pøipojení k serveru.');
mysql_select_db('moviesite', $db) or die(mysql_error($db));

// Upravte cestu tak, aby odpovídala vašemu umístìní.
$dir ='obrazky';

// Upravte cestu tak, aby odpovídala vašemu umístìní.
putenv('GDFONTPATH=C:/Windows/Fonts');
$font = 'arial.ttf';

// Obsluha pøenášených souborù.
if ($_POST['submit'] == 'Odeslat') {

  // Nejprve se ujistìte, že pøenos probìhl v poøádku.
  if ($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK)
  {
    switch ($_FILES['uploadfile']['error']) {
      case UPLOAD_ERR_INI_SIZE:
        die('Velikost pøenášeného souboru pøesáhla hodnotu ' .
                'upload_max_filesize definovanou v souboru php.ini.');
        break;
      case UPLOAD_ERR_FORM_SIZE:
        die('Velikost pøenášeného souboru pøesáhla hodnotu MAX_FILE_SIZE ' .
                'urèenou ve formuláøi HTML.');
        break;
      case UPLOAD_ERR_PARTIAL:
        die('Soubor byl pøenesen jen èásteènì.');
        break;
      case UPLOAD_ERR_NO_FILE:
        die('Nebyl pøenesen žádný soubor.');
        break;
      case UPLOAD_ERR_NO_TMP_DIR:
        die('Server nemá k dispozici doèasný adresáø.');
        break;
      case UPLOAD_ERR_CANT_WRITE:
        die('Serveru se nepodaøilo uložit pøenesený soubor na disk.');
        break;
      case UPLOAD_ERR_EXTENSION:
        die('Pøenos souboru zastaven doplòkem PHP.');
        break;
    }
  }

  // Zjištìní informací o pøeneseném souboru.
  $image_caption = $_POST['caption'];
  $image_username = $_POST['username'];
  $image_date = @date('Y-m-d');
  list($width, $height, $type, $attr) =
  getimagesize($_FILES['uploadfile']['tmp_name']);

  // Zkontrolujte, zda podporujete formát pøeneseného souboru.
  $error = 'Formát pøeneseného souboru není podporován.';
  switch ($type) {
    case IMAGETYPE_GIF:
      $image = imagecreatefromgif($_FILES['uploadfile']['tmp_name']) or
      die($error);
      break;
    case IMAGETYPE_JPEG:
      $image = imagecreatefromjpeg($_FILES['uploadfile']['tmp_name']) or
      die($error);
      break;
    case IMAGETYPE_PNG:
      $image = imagecreatefrompng($_FILES['uploadfile']['tmp_name']) or
      die($error);
      break;
    default:
      die($error);
    }

    // Uložte informace do tabulky.
    $query = 'INSERT INTO images (image_caption, image_username, image_date)
              VALUES ("' . $image_caption . '", "' . $image_username . '", "'
    . $image_date . '")';

    $result = mysql_query($query, $db) or die (mysql_error($db));

    // Naètení identifikátoru obrázkù generovaného databází MySQL automaticky
    // pøi vložení nového záznamu.
    $last_id = mysql_insert_id();

    // Uložení obrázku na koneèné místo.
    $image_id = $last_id;
    imagejpeg($image, $dir . '/' . $image_id  . '.jpg');
    imagedestroy($image);

  } else {
    // Zjištìní informací o obrázku.
    $query = 'SELECT
                  image_id, image_caption, image_username, image_date
              FROM
                  images
              WHERE
                  image_id = ' . $_POST['id'];
    $result = mysql_query($query, $db) or die (mysql_error($db));
    extract(mysql_fetch_assoc($result));

    list($width, $height, $type, $attr) = getimagesize($dir . '/' . $image_id .
        '.jpg');
  }

  if ($_POST['submit'] == 'Uložit') {
    // Ovìøte platnost obrázku.
    if (isset($_POST['id']) && ctype_digit($_POST['id']) &&
      file_exists($dir . '/' . $_POST['id'] . '.jpg')) {
      $image = imagecreatefromjpeg($dir . '/' . $_POST['id'] . '.jpg');
    } else {
      die('Zadán neplatný obrázek.');
    }

    // Aplikace filtru.
    $effect = (isset($_POST['effect'])) ? $_POST['effect'] : -1;
    switch ($effect) {
      case IMG_FILTER_NEGATE:
        imagefilter($image, IMG_FILTER_NEGATE);
        break;
      case IMG_FILTER_GRAYSCALE:
        imagefilter($image, IMG_FILTER_GRAYSCALE);
        break;
      case IMG_FILTER_EMBOSS:
        imagefilter($image, IMG_FILTER_EMBOSS);
        break;
      case IMG_FILTER_GAUSSIAN_BLUR:
        imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
        break;
    }

    // Požaduje-li to uživatel, pøidejte popisek.
    if (isset($_POST['emb_caption'])) {
      imagettftext($image, 12, 0, 20, 20, 0, $font, $image_caption);
    }

    // Uložte obrázek po aplikaci filtru.
    imagejpeg($image, $dir . '/' . $_POST['id'] . '.jpg', 100);
    ?>
<html>
  <head>
    <title>Zde je váš obrázek!</title>
  </head>
  <body>
    <h1>Obrázek byl úspìšnì uložen!</h1>
    <img src="obrazky/<?php echo $_POST['id']; ?>.jpg" />
  </body>
</html>
<?php
} else {
?>
<html>
  <head>
    <title>Zde je váš obrázek!</title>
  </head>
  <body>
    <h1>Takže, jaké to je, být slavný?</h1>
    <p>Zde je obrázek, který jste právì odeslali na náš server:</p>
    <?php
    if ($_POST['submit'] == 'Odeslat') {
      $imagename = 'obrazky/' . $image_id  . '.jpg';
    } else {
      $imagename = 'image_effect.php?id=' . $image_id  . '&e=' .
      $_POST['effect'];

      if (isset($_POST['emb_caption'])) {
        $imagename .= '&capt=' . urlencode($image_caption);
      }
    }
    ?>
    <img src="<?php echo $imagename; ?>" style="float:left;">
    <table>
      <tr><td>Obrázek je uložen jako: </td>
        <td><?php echo $image_id  . '.jpg'; ?></td></tr>
      <tr><td>Výška: </td><td><?php echo $height; ?></td></tr>
      <tr><td>Šíøka: </td><td><?php echo $width; ?></td></tr>
      <tr><td>Datum uložení: </td><td><?php echo $image_date; ?></td></tr>
    </table>
    <p>Obrázek mùžete upravit nìkolika zpùsoby. Poznámka: Po uložení se zmìny
    <em>stanou nevratné</em>.</p>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
      <div>
        <input type="hidden" name="id" value="<?php echo $image_id;?>"/>
        Filtr: <select name="effect">
          <option value="-1">Žádný</option>
          <?php
          echo '<option value="' . IMG_FILTER_GRAYSCALE . '"';
          if (isset($_POST['effect']) && $_POST['effect'] ==
            IMG_FILTER_GRAYSCALE) {
            echo ' selected="selected"';
          }
          echo '>Èernobílý</option>';

          echo '<option value="' . IMG_FILTER_GAUSSIAN_BLUR . '"';
          if (isset($_POST['effect']) && $_POST['effect'] ==
            IMG_FILTER_GAUSSIAN_BLUR) {
            echo ' selected="selected"';
          }
          echo '>Rozmazat</option>';

          echo '<option value="' . IMG_FILTER_EMBOSS . '"';
          if (isset($_POST['effect']) && $_POST['effect'] ==
            IMG_FILTER_EMBOSS) {
            echo ' selected="selected"';
          }
          echo '>Reliéf</option>';

          echo '<option value="' . IMG_FILTER_NEGATE . '"';
          if (isset($_POST['effect']) && $_POST['effect'] ==
            IMG_FILTER_NEGATE) {
            echo ' selected="selected"';
          }
          echo '>Negativ</option>';
          ?>
        </select>
        <br/><br/>
        <?php
        echo '<input type="checkbox" name="emb_caption"';
        if (isset($_POST['emb_caption'])) {
          echo ' checked="checked"';
        }
        echo '>Vložit do obrázku popisek?';
        ?>
        <br/><br/>
        <input type="submit" value="Náhled" name="submit" />
        <input type="submit" value="Uložit" name="submit" />
      </div>
    </form>
  </body>
</html>
<?php
}
?>

Po zvolení požadovaných úprav na tejto stránke (štýl obrázku-čiernobielo...) sú dve možnosti:
1. Uložiť obrázok na server-prebehne v pohode
2. Náhľad-vtedy sa použije tento skript:

<?php
// Upravte cestu tak, aby odpovídala vašemu umístìní.
$dir ='obrazky';

// Zmìòte cestu tak, aby odpovídala umístìní souborù písem ve vašem systému.
// Pøípadnì vyberte jiné písmo.
putenv('GDFONTPATH=C:/Windows/Fonts');
$font = 'arial.ttf';

// Ovìøte, že obrázek je platný.
if (isset($_GET['id']) && ctype_digit($_GET['id']) && file_exists($dir . '/' .
    $_GET['id'] . '.jpg')) {
    $image = imagecreatefromjpeg($dir . '/' . $_GET['id'] . '.jpg');
} else {
  die('Zadán neplatný obrázek.');
}

// Použijte filtr.
$effect = (isset($_GET['e'])) ? $_GET['e'] : -1;
switch ($effect) {
case IMG_FILTER_NEGATE:
    imagefilter($image, IMG_FILTER_NEGATE); 
    break;
case IMG_FILTER_GRAYSCALE:
    imagefilter($image, IMG_FILTER_GRAYSCALE); 
    break;
case IMG_FILTER_EMBOSS:
    imagefilter($image, IMG_FILTER_EMBOSS); 
    break;
case IMG_FILTER_GAUSSIAN_BLUR:
    imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
    break;
}

// Na vyžádání pøidejte popisek.
if (isset($_GET['capt'])) {
    imagettftext($image, 12, 0, 20, 20, 0, $font, $_GET['capt']);
}

// Zobrazení obrázku.
header('Content-Type: image/jpeg');
imagejpeg('$image', '', 100);
?>

A tu je ten problém. Po zapísaní zmien a kliknutí na náhľad sa síce zmení adresa náhľadu napr. na www.xyz.sk/PHP/image_effect.php?id=52&e=1 ale obrázok sa nezobrazí. Pokiaľ však kliknem na uložiť, zmeny sa aplikujú (obrázok sa zmení na čiernobiely) a uložia. Náhľad však nikdy nefunguje a ja naozaj neviem prečo :-/.

Dúfam, že som to dobre opísal. Zdrojové kódy, ako som už písal, sú z jednej knihy a sú tam aj popisy v Češtine. Ak niekto príde na to, kde je chyba a dá mi vedieť, budem mu veľmi vďačný.

Ďakujem, samson.

Offline

Zápatí

Založeno na FluxBB | CZ a SK