Autor Zpráva
x
Profil *
potřebuju pomoc, seděl sem nad tim asi 5 hodin ale na nic co by fungovalo sem nepřišel...
potřeboval bych nák jednouduše ošetřit tenhle kod, aby když někdo bude chít nahrát soubor se stejnym názvem kterej už tam nahranej je, se přidalo do názvu souboru třeba číslo nebo něco, prostě aby ten soubor měl jinej název a nepřehrál mi te původní...pls helpněte mi s tim někdo, skoušel sem možný i nemožný ale sám na to prostě nepřidu...




if (isset($_FILES['fupload']))

{
if(!in_array($_FILES['fupload']['type'],$allowed_types)){ // Pokud soubor bude mít kocovku .php, upload se neprovede a vypíše hlášku
echo "Povoleny jsou pouze soubory typu .gif .jpeg .bmp !";
}else{
$slozka = "upload"; // Zde si napište svojí složku, do které se budou soubory ukládat (bez lomítka)

$cil = $slozka . "/" .$_FILES['fupload']['name']; // Toto je proměnná $cil, která obsahuje adresář, kde se má soubor uploadovat a taky název souboru.

$nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí dočastné umístění souboru

$copy = move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky

or die ("Přenesený soubor nelze zkopírovat"); // A pokud se nepovede, tak vypíše tuto hlášku


chmod ($cil, 0644); // Ještě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777


}
}

Alphard
Profil
if(!in_array($_FILES['fupload']['type'],$allowed_types)){ // Pokud soubor bude mít kocovku .php, upload se neprovede a vypíše hlášku
echo "Povoleny jsou pouze soubory typu .gif .jpeg .bmp !";

chabá ochrana, projde např. phtml, php5, ...

jinak, spousta uživatelů ti naposílá soubory s diakritikou a s ní budou problémy, doporučuji vygenerovat nový název

PS: nevím, jestli je to do nějaké fotogalerie, ale .bmp není na web moc vhodné
x
Profil *
jo díky za radu, ale na to ted nemám čas se v tom nák vrtat, jediný co potřebuju je aby se změnil název když už tam je soubor se stejnym názvem nahranej...
o
Profil *
a co tam dát něco jako

if(file_exists($nazev_souboru))move_uploaded_file($nazev_souboru."_nec o", $cil);
else move_uploaded_file($nazev_souboru, $cil);
x
Profil *
bohužel mi to nefunguje :(
Alphard
Profil
co tohle?

$adresar = $slozka . "/";
$jmeno = $_FILES['fupload']['name'];
while (file_exists ($adresar.$jmeno))
{
$casti = explode (".", $jmeno);
$jmeno = $casti[count ($casti)-2].rand (1, 100).".".$casti[count ($casti)-1];
}
$cil = $adresar.$jmeno;
x
Profil *
no moc se v tom neviznám, hodil sem to tam ale nefunguje... neznám moc tyhlety věci : explode, while atd... tak v tom mám docela guláš... no prostě mě to nefunguje ale i tak dík..... doufám že to nebude dálší z věcí kterou sem nedokázal rozhejbat :(
x
Profil *
pls poradte někdo, myslim že se to tu už někdy řešilo, pátral sem po tom topicu, ale nenašel sem ho, pokud vim tak tam byl celej zdrojak podle ktery bych to už asi dal dohromady :(
mosba
Profil
zkus totok:
-----------------
kontroluje to, jestli se soubor v ceste $cil uz nenachazi. pokud ano, tak zacne docela trapne doplnovat '1' na konec jmena souboru (pred priponu) a tak dlouho, dokud takove jmeno souboru jeste nebude obsazeno nebo dokud mu to nezarazis statickou promenou $max_opakovani. Neni to nic krasneho, ale melo byto fachat.
!!! A bacha, pocitej s tim, ze jesi bude jmeno uploadovaneho souboru obsahovat vic tecek, tak to od druheho uploadu dal okraji vsechno za druhou teckou. tj. napr. soubor "prkotina.ttt.jpg" poprve nahraje jako "prkotina.ttt.jpg", podruhe jako "prkotina1.ttt", potreti jako "prkotina11.ttt" atd...
------------------


$cil = getcwd() . '/uploaded_files/'; // jakejkoliv adresar
$cil .= $_FILES['fupload']['name'];
$max_velikost = 100000; // 100 kb

// jeste prilep prinejmensim tu kontrolu typu souboru
if ( is_uploaded_file( $_FILES['fupload']['tmp_name'] ) && $_FILES['fupload']['size'] < $max_velikost )
{
$cil = is_this_file_out_there( $cil ); // srandovni fce

if ( $cil === FALSE )
{
$hlaska = '<p>Jméno souboru se nám nějak moc opakovalo, tak jsme ho nenahráli...</p>';
}
elseif ( move_uploaded_file( $_FILES['fupload']['tmp_name'], $cil ) )
{
$hlaska = '<p>Soubor ' . basename( $cil ) . ' se podařilo nahrát.</p>';
}
else
{
$hlaska = '<p>Soubor ' . basename( $cil ) . ' se bohužel <b>NEpodařilo</b> nahrát.</p>';
}

}
else
{
$hlaska = '<p>Soubor ' . $_FILES['fupload']['name'] . ' patrně přesahuje (max. povolenou velikost) ' . $max_velikost . ' bajtů.</p>';
}


/* tahle fce ti vcelku stupidne kontroluje, jsetli tam soubor uz nahodou neni. */
function is_this_file_out_there( $cil )
{
static $pocet = 0;
$max_opakovani = 5; // max. počet opakování jména souboru
if ( $pocet > $max_opakovani )
{
return FALSE;
}

if ( !file_exists( $cil ) )
{
return $cil;
}
else
{
$soubor = basename( $cil );
$cesta = dirname( $cil );

$casti = explode( '.', $soubor );
$soubor = $casti[0];
$soubor .= '1'; // přípona jména souboru...
$soubor .= '.' . $casti[1];

$cil = $cesta . '/' . $soubor;
$pocet++;
return is_this_file_out_there( $cil );
}
}

-------------------
snad ti to trocha pomuze, me to ted bezelo
x
Profil *
díky moc, ale pořád mi to nějak nefunguje, píše to chybovou hlášku... moh bys mi pls poslat celej ten zdrojak, se kterym ti to chodilo, nevim jestli k tomu mám něco doplnit nebo umazat...:(
Alphard
Profil
ale pořád mi to nějak nefunguje, píše to chybovou hlášku
to je ono, nenapíšeš tu chybovou hlášku ani nekonkretizuješ, co nefunguje

říct "díky, ale nefunguje to" tvůj problém nevyřeší
např. já jsem ten script napsal jen tak z hlavy, nezkoušel jsem ho a může tam být chyba, neříkám, že ne, ale kdyby jsi napsal, co je špatně, tak se ho pokusím opravit, ale takhle?
x
Profil *
kdybych věděl co je špatně tak už sem to dávno spravil... v php docela dost plavu a když potřebuju něco vytvořit tak mě to stojí hroznýho času, a někdy to prostě nejde tak se ptám tady, jak už sem psal kdybych věděl čim to je tak to nezjištuju tady... kdybych ti napsal chybovku stejně asi nic moc nezjistiš (třeba se mílim), potřeboval bys k tomu celej muj zdrojak, abys našel řádek atd...btw: tim co sem napsal nemyslim nic proti tobě ale myslim si že jednoduší bude když mi mosba pošle celej kod, at už v kombinaci s tim mym puvodnim nebo ne, než abych tady já zdlouhavě vypisoval co to dělá, co to píše když atd. atd....
Alphard
Profil
jsou v zásadě 2 druhy chyb:
1. logické – zpravidla nekončí chybou, jenom prostě nefungují a ano, potřeboval bych podstatnou část kódu
2. syntaktické – (téměř) vždy končí chybou a na opravení mi stačí tak 2 řádky a znění chybové hlíšky


kdybych ti napsal chybovku stejně asi nic moc nezjistiš (třeba se mílim),
nesouhlasím, hláška přesně popíše, v čem je problém
mosba
Profil
No ono to uz jen staci doplnit o html, dole to ukazuju.
Nicmene Alphard ma pravdu, nejlepe ti pomuzeme kdyz nam pomuzes - hodis sem chybovou hlasku spolu s inkriminovanym radkem kodu, pripadne nekolika radky kolem pro lepsi kontext.

ten muj vcerejsi kousek kodu obal do php tagu a pod to vlep formular...

---------- zacatek souboru -----------
<?php

$cil = getcwd() . '/uploaded_files/'; // jakejkoliv adresar
$cil .= $_FILES['fupload']['name'];
...
..
.
..
...
$pocet++;
return is_this_file_there( $cil );
}
}

?>

<html>
<head></head>
<body>

<?php echo $hlaska . '<hr />'; ?>

<h3>Upload souboru</h3>
<form method="post" action="<?php $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">
<input type="file" name="fupload">
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>
------------- konec souboru -----------

nic vic tam neni. pojmenuj souboru tra "grc241.php" a ve stejnem adresari kde ho budes prohlizet si vytvor adresar 'uploaded_files', tj. jestli to budes mit napr. v adresari /www/pokus tak chces:
/www/pokus/grc241.php
/www/pokus/uploaded_files/

no a nebo zmen radek:
$cil = getcwd() . '/uploaded_files/'; // jakejkoliv adresar

Kazdopadne tohle je pouhy vyplod od vcerejsi vecere, mel by jsi to zbezpecnit! je to jen volneji rozepsana while smycka kterou uvadel Alphard, aby bylo lehceji videt, co chces udelat.
x
Profil *
tohle už sem rozhejbal ale vyskyt se zase jinej problem... díky moc zejtra to snad nák pořešim !
x
Profil *
Alphard- tak to jenom já sem tak blbej že to nevyčtu... teda občas to z toho najdu
mosba- potřeboval bych další radu teda spíš zdroják...
ten tvuj už funguje bez problemu ! chtělo to menší upravy, a jak řikám docela krutě v tom plavu takže mi to trvalo dost dlouho...

ted to vypadá takhle :

-----------------------------------

<?php


/* tahle fce ti vcelku stupidne kontroluje, jsetli tam soubor uz nahodou neni. */
function is_this_file_out_there( $cil )
{
static $pocet = 0;
$max_opakovani = 5; // max. počet opakování jména souboru
if ( $pocet > $max_opakovani )
{
return FALSE;
}

if ( !file_exists( $cil ) )
{
return $cil;
}
else
{
$soubor = basename( $cil );
$cesta = dirname( $cil );

$casti = explode( '.', $soubor );
$soubor = $casti[0];
$soubor .= '1'; // přípona jména souboru...
$soubor .= '.' . $casti[1];

$cil = $cesta . '/' . $soubor;
$pocet++;
return is_this_file_out_there( $cil );
}
}


$allowed_types = array("image/bmp","image/gif","image/jpeg","image/pjpeg");

if (isset($_FILES['fupload']))

{
if(!in_array($_FILES['fupload']['type'],$allowed_types)){ // Pokud soubor bude mít kocovku .php, upload se neprovede a vypíše hlášku
echo "Povoleny jsou pouze soubory typu .gif .jpeg .bmp !";
}else{



$cil = 'upload/'; // jakejkoliv adresar
$cil .= $_FILES['fupload']['name'];
$max_velikost = 100000; // 100 kb

// jeste prilep prinejmensim tu kontrolu typu souboru
if ( is_uploaded_file( $_FILES['fupload']['tmp_name'] ) && $_FILES['fupload']['size'] < $max_velikost )
{
$cil = is_this_file_out_there( $cil ); // srandovni fce

if ( $cil === FALSE )
{
echo 'Jméno souboru se nám nějak moc opakovalo, tak jsme ho nenahráli...';
}
elseif ( move_uploaded_file( $_FILES['fupload']['tmp_name'], $cil ) )
{
echo 'Soubor ' . basename( $cil ) . ' se podařilo nahrát.';
}
else
{
echo 'Soubor ' . basename( $cil ) . ' se bohužel <b>NEpodařilo</b> nahrát.';
}

}
else
{
echo 'Soubor ' . $_FILES['fupload']['name'] . ' patrně přesahuje (max. povolenou velikost) ' . $max_velikost . ' bajtů.</p>';
}



}
}

-----------------------------------

potřeboval bych nahrát víc obrázků najednou dejme tomu 5, jak na to ? byl bys schopnej to dát nák dohromady, aby to bylo co nejjednoduší ?
mosba
Profil
k tomu potřebuješ mit soubory nahrane do pole, tj. místo
<input type="file" name="fupload">

tam dát několik inputů s názvem pole (v tomhle případě budeš moc vybrat najednou tři soubory)
<input type="file" name="fupload[]">
<input type="file" name="fupload[]">
<input type="file" name="fupload[]">

k uploadnutým souborům pak přisupuješ přes pole $_FILES takhle:
$_FILES['fupload']['name'][0] - jm. prvního souboru
$_FILES['fupload']['name'][1] - jm. druhýho souboru
atd.

jestli je to nejasný, tak si takhle uploadni několik souboru a do kodu vraz:
var_dump($_FILES);
a případně to porovnej s tim, co ti vyleze přes jediny input type=file


javascriptem mužeš docílit, že se ti po vybrání jednoho souboru objeví input pro další soubor a tak pořád dál... abys nemusel natvrdo vrazit do html xy inputu pro upload xy souboru

pokud chceš nahrat více souboru pomoci vyloženě jediného polička input type=file, procti si tohle:
http://the-stickman.com/web-development/javascript/upload-multiple-fil es-with-a-single-file-element/
sám jsem to takhle nezkoušel.
mosba
Profil
--- omylem duplikát ---
echo
Profil *
Ja som to riesil takto:

$suffix=1;
while(file_exists($new_filename)){
$new_filename=$upload_path.$name.'['.$suffix.'].'.$extension;
$suffix++;
}

samozrejme predpoklada to uplne rozpitvanie mena suboru pomocou fukcie pathinfo() a pridavneho kodu:

$dot=@strrpos($path_info['basename'],".");
if($dot){
$path_info['name']=substr($path_info['basename'],0,$dot);
}

a co sa tyka filtrovania suborov v ramci uploadu, na to mam take riesenie:

$permited_file_types = array('jpg','JPG','gif','GIF','png','PNG');

if(in_array($path_info['extension'],$permited_file_types)){
//samotny upload
}

z uvedenho vypliva ye fukcia pathinfo() je velmi uzitocna pri praci zo subormi
echo
Profil *
Ja som to riesil takto:

$suffix=1;
while(file_exists($new_filename)){
$new_filename=$upload_path.$name.'['.$suffix.'].'.$extension;
$suffix++;
}

samozrejme predpoklada to uplne rozpitvanie mena suboru pomocou fukcie pathinfo() a pridavneho kodu:

$dot=@strrpos($path_info['basename'],".");
if($dot){
$path_info['name']=substr($path_info['basename'],0,$dot);
}

a co sa tyka filtrovania suborov v ramci uploadu, na to mam take riesenie:

$permited_file_types = array('jpg','JPG','gif','GIF','png','PNG');

if(in_array($path_info['extension'],$permited_file_types)){
//samotny upload
}

z uvedenho vypliva ye fukcia pathinfo() je velmi uzitocna pri praci zo subormi
x
Profil *
mosba
díky moc už to šplape, sice sem to možná udál trochu jinak než si myslel ty, ale hlavně že to funguje...
nevěděl bys pls jak je ten javascript ? nebo kde bych ho moh najít ?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0