Autor Zpráva
Suta
Profil
Ahoj. Už půl dne procházím všechny možné stránky s řešením nahrání souboru na server, a nic...
Může mi někdo poradit ? Díky.

Co je blbě ?

Tady je formulář (formular.php):

<HTML>

<BODY>

<form action="nahrej.php" method=post enctype="multipart/form-data">
Zadej svoje jméno: <input name=jmeno size=20><br>
Připoj foto:
<input type=file name=foto accept="image/*,text/plain"><br>
Odeslat: <input type=submit value="ok">.
</form>

</BODY>
</HTML>


Tady je script, který to má zpracovat a nahrát do adresáře foto na serveru (nahrej.php):


<?

@$spojeni = mysql_connect("mysql.wz.cz","meno_databaze","moje_heslo");
if (!$spojeni):
echo "Nepodařilo se připojit.";
break;
endif;

mysql_select_db("meno_databaze");

if ($foto_type=="image/gif")
copy($foto, "/foto/$jmeno.gif");
else
echo "Obrázek můžeš poslat jen ve formátu .gif";


mysql_close($spojeni);
?>
Hugo
Profil
Problem muze byt ve funkci copy(), ta je zakazana, pokud je spusteny safe mod. Zkus misto ni pouzit move_uploaded_file().
Leo
Profil
Presne tak, move_uploaded_file, s pouzitim pole $_FILES['foto'], Leo
Suta
Profil
Nemá někdo nějaký dobrý odkaz, kde je podrobně napsané, jak uložit např. fotku do databáze pomocí formuláře input type="file" a scriptu ?

Nikde jsem to nenašel. Všude jen samé složité uploudování souborů, ale podrobně napsané, jak se po odeslání souboru ve scriptu připojit k databázi a vložit do ní soubor, to nikde není. Nejsem zběhlý v php, tak bych potřeboval nějaký rozumný odkaz. Čert aby to spral.
Hugo
Profil
Suta

Rozhodne ti doporucuju ukladat jen URI a fotky uploadovat na disk. Usetris si hodne potizi a vetsinou je to i rychlejsi.
Suta
Profil
Hm... nefunguje mi to.
<body>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<title>Test</title>
</head>

<form method="POST" ENCTYPE="multipart/form-data" action="">
Zadej soubor: <input type="file" name="odeslana_stranka">
<input type="submit" value="Odeslat">
</form>

<?
move_uploaded_file($_FILES["$odeslana_stranka"]["$soubor"],"./foto/$odeslana_stranka");
?>

</body>



- mělo by to nahrát soubor '$odeslana_stranka' do adresáře 'foto' a uložit jej jako soubor s názvem '$odeslana_stranka'.

(adresář, do kterého se zapisuje prý musí mít správně nastaveno právo zápisu a spouštění, nevím však co, kde, jak atd.)
Hugo
Profil
Pohledej v teto diskuzi, nastaveni prav souboru se tu resilo mockrat.
Suta
Profil
Prohledal jsem toho dost, a stále nevím, zda je to těmi právy a jak se do dá případně změnit (napsáním nějakého scriptu?, přímo v nastavení na serveru?

(přece pokud jsem nikde nic nenastavoval, tak jako administrátor, který vytvořil stránku v PHP bych měl mít automaticky povoleno uložit si přes PHP nějaký soubor do adresáře na serveru, nebo ne ?)

Je výše uvedený script chybný ?
Leo
Profil
"$_FILES["$odeslana_stranka"]["$soubor"]"

Mate blbe obsah tech zavorek, Leo
Suta
Profil
A jak to spravit ?
Leo
Profil
Treba

$_FILES['odeslana_stranka']['tmp_name']

Leo
Suta
Profil
<?

move_uploaded_file($_FILES['odeslana_stranka']['tmp_name'],"./foto/$odeslana_stranka");
?>


vyhodí hlášku:

Warning: move_uploaded_file(): Unable to access ./foto//home/tmp/phpioGFNE in /3w/wz.cz/s/suta/zapis.php on line 13
Leo
Profil
Tak to je problem az v tom druhem argumentu - Apache totiz pri move_uploaded_file jako aktualni adresar nebere ten, kde mate php skript, takze tecka v "./foto/..." je neco jineho, nez si myslite:

http://php.ftp.cvut.cz/manual/cs/function.move-uploaded-file.php

Treti komentar shora, Leo
Leo
Profil
A jeste jedna vec - predtim, nez to lidem umoznite, musite zabezpecit, ze to, co uploaduji, neni treba php skript, ale opravdu fotka, jinak se nebudete stacit divit :-) Leo
Suta
Profil
No jo, kdybych nedělal němčinu tak bych si možná početl. Jak tedy nastavit cestu ?

Já vím, ale já už jsem asi 90% původního zdrojového kódu vymazal až mi zůstal tento základ, který taky nefunguje.
Leo
Profil
Ted na to koukam, ze tam mate jeste $odeslana_starnka, co si myslite, ze v te promenne mate? :-) Leo
Leo
Profil
Nemcina vam je pri programovani tak na dve veci... Leo
Suta
Profil
Myslel jsem že se takto nahraný soubor přejmenuje. Je to špatně?
Leo
Profil
Tak si zkuste vypsat

echo $odeslana_stranka, co vam to vypise? Leo
Suta
Profil
Problém vyřešen. Díky.
Leo
Profil
Neni za co, Leo
Suta
Profil
Tak ještě:

1) v databázi je tabulka s názvem "prvnitabulka"
2) v tabulce je sloupec "foto"
3) ve sloupci foto je záznam "Alkohol.jpg"
4) na serveru v adresáři "foto" mám soubor (obrázek) "Alkohol.jpg
...
Zatím vše v pořádku
...

Když chci záznam "Alkohol.jpg" vypsat, použiji:
$test = mysql_fetch_array(mysql_query("select * from prvnitabulka"));

echo $test["foto"];

Vypíše text: Alkohol.jpg
...
Zatím vše v pořádku
...
A teď když chci výše uvedené (což funguje) spojit a zobrazit tak obrázek ze souboru foto s názvem Alkohol.jpg a napíšu:
$test = mysql_fetch_array(mysql_query("select * from prvnitabulka"));

echo "<img src=\"foto\\$test[\"foto\"]\">"

... tak nefunguje.

Zkoušel jsem všechny možné zápisy syntaxe (
'<img src="foto\'.$test["foto"].'">'

nebo
echo "<img src=\"foto/$test[\"foto\"]\">"

...

Čím to ? Mám problém v syntaxi ?
Nebo php neumí zobrazit proměnou vytaženou z databáze v cestě k otevíranému souboru ??
Leo
Profil
echo "<img src=\"$test['foto']\">";

Leo
Suta
Profil
Myslíš echo "<img src=\"foto/$test['foto']\">"; (zapomněl jsi na cestu do adresáře foto)

Jasně, tak jsem to taky zkoušel, a nic.

Píše: Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in /3w/wz.cz/s/suta/hlavni.php on line 62
Suta
Profil
A přitom

echo "<img src=\"foto/Alkohol.bmp\">";


funguje. Když chce ale místo Alkohol.bmp použít $test['foto'], ve které je hodnota Alkohol.bmp, tak to nejede.

Vážně nevím.
jooka
Profil
Co takhle:
echo "<img src=\"foto/".$test['foto']."\">";



případně:
printf('<img src="foto/%s">', $test['foto']);
Anonymní
Profil *
můžete mi prosímvás vysvětlit , proč se trápíte a eskapováním uvozovek, když to jde jednoduše pomocí apostrofu???

echo '<img src="foto/'.$test["foto"].'" >';

krteczek
PS:navíc výpisy v apostrofech php neparsuje, takže běh skriptů je rychlejší
kuba
Profil *
proc mi nefunguje upload u obrazku typu jpg, png??? u gif vse funguje, u txt taky.
po odeslani formulare se mi ma vykonat take cast tohoto skriptu :

$userfile_type = $_FILES['userfile']['type'];

if($userfile_type != 'image/jpg')
{
echo 'Typ nahravaneho souboru musi mit priponu <b>jpg</b>.';
exit;
}

...nerozpozna, ze jde o jpg popr. png atd. :-)...
Hugo
Profil
kuba

Tady je citace z php.net

http://mirrors.inway.cz/manual/en/features.file-upload.php#53133

keith at phpdiary dot org
24-May-2005 01:14

Caution: *DO NOT* trust $_FILES['userfile']['type'] to verify the uploaded filetype; if you do so your server could be compromised. I'll show you why below:

The manual (if you scroll above) states: $_FILES['userfile']['type'] - The mime type of the file, if the browser provided this information. An example would be "image/gif".

Be reminded that this mime type can easily be faked as PHP doesn't go very far in verifying whether it really is what the end user reported!

So, someone could upload a nasty .php script as an "image/gif" and execute the url to the "image".

My best bet would be for you to check the extension of the file and using exif_imagetype() to check for valid images. Many people have suggested the use of getimagesize() which returns an array if the file is indeed an image and false otherwise, but exif_imagetype() is much faster. (the manual says it so)
kuba
Profil *
dekuju za radu. jenom pro uplnost dodam, ze v php.ini musi byt odkomentovano
extension=php_mbstring.dll
a pak :
extension=php_exif.dll

http://www.zend.com/manual/install.windows.extensions.php
Toto téma je uzamčeno. Odpověď nelze zaslat.

0