Nejste přihlášeni
Stránky 1
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
skus definovat priecinok bez lomky $dir ='obrazky';
Offline
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
Stránky 1