#1 Re: Ostatní problémy » PHP - neuploaduje do zložky » 2013-08-02 22:33:32

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.

#2 Ostatní problémy » PHP - neuploaduje do zložky » 2013-07-27 11:16:26

samson
Odpovědi: 2

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.

#3 Re: Pravidla a oznámení » [Vyřešeno] Endora hardware » 2011-03-16 23:40:32

To všetko dokáže utiahnuť len reklama a plus (ktorý je vo veľmi dobrej cenovej kategórii  smile )? Veď to čo tu je sa nezdá ani ako reklama. To je super, len tak ďalej  wink .

#4 Re: Program plus » Chat » 2011-03-13 18:59:06

Tak ako to teda je? Môžem používať napr. ajax chat alebo nie? Je tu potom ešte možnosť používať chat ktorý sa musí refreshovat ručne ale povedzte, nie je to blbosť?  smile . Mám tiež plus program.

Zápatí

Založeno na FluxBB | CZ a SK