« 1 2 »
Autor Zpráva
kordy
Profil
dobrý večer
chtěl bych se zeptat jak upravit uploadování souborů tak, aby když se objeví soubor se stejným názvem přidalo by se za název (2) případně (3) a tak dál
pokud Vám to pomůže upload již mám stačí jej tedy pouze upravit...

<HTML>
<HEAD><TITLE>Upload</TITLE></HEAD>
<BODY>
<b>Zadejte jmeno souboru:</b>
<FORM ACTION="upload.php" METHOD="post" ENCTYPE="multipart/form-data">
<INPUT TYPE="file" NAME="soubor" SIZE="40">
<INPUT TYPE="submit" NAME="ok" VALUE="Upload">
</FORM>
<?php
$soubor_name = ($_FILES["soubor"]["name"]);
$soubor = ($_FILES["soubor"]["tmp_name"]);
$ok = ($_POST["ok"]);

if ($ok == "Upload" && $soubor_name!="")
{
    if (move_uploaded_file($soubor, "./galerie/$soubor_name"))
        {
        chmod ("./$soubor_name", 0646);
        echo "<b>Soubor $soubor_name byl nahran na server</b><BR>";
        }
    else
        {
        echo "<b>Chyba - soubor nebyl nahran</b><BR>";
        }
}
?>
</BODY>
</HTML>


dík za pomoc
Alphard
Profil
Existuje funkce file_exists(), dokážete si sestavit zbytek?
kordy
Profil
o této funkci jsem věděl, píši právě kvůli tomu, že to nedokážu sestavit...:(
Alphard
Profil
  $delimiter = strrpos($soubor_name, '.');
  $filename = $soubor_name;
  for ($i = 2; file_exists($filename); $i++)  // nezapomente doplnit spravny adresar
  {
    $filename = substr($soubor_name, 0, $delimiter).'_'.$i.substr($soubor_name, $delimiter);
  }

Bezpečnost to ale neřeší. A není vhodné nechávat v názvech diakritiku a podobný bordel.
kordy
Profil
díky moc hned to zkusím :)
kordy
Profil
rozumím tomu dobře, že to má vypadat takhle?

<HTML>
<HEAD><TITLE>Upload</TITLE></HEAD>
<BODY>
<b>Zadejte jmeno souboru:</b>
<FORM ACTION="upload.php" METHOD="post" ENCTYPE="multipart/form-data">
<INPUT TYPE="file" NAME="soubor" SIZE="40">
<INPUT TYPE="submit" NAME="ok" VALUE="Upload">
</FORM>
<?php
  $delimiter = strrpos($soubor_name, '.');
  $filename = $soubor_name;
  for ($i = 2; file_exists(/galerie/$filename); $i++)  // nezapomente doplnit spravny adresar
  {
    $filename = substr($soubor_name, 0, $delimiter).'_'.$i.substr($soubor_name, $delimiter);
  }
$soubor = ($_FILES["soubor"]["tmp_name"]);
$ok = ($_POST["ok"]);

if ($ok == "Upload" && $soubor_name!="")
{
    if (move_uploaded_file($soubor, "/galerie/$soubor_name"))
        {
        chmod ("./$soubor_name", 0646);
        echo "<b>Soubor $soubor_name byl nahran na server</b><BR>";
        }
    else
        {
        echo "<b>Chyba - soubor nebyl nahran</b><BR>";
        }
}
?>
</BODY>
</HTML>
nefunguje to... píše chybu HTTP 500
Davex
Profil
kordy:
píše chybu HTTP 500
Máš chybu v kódu. Aby ses dozvědel kde, tak si zapni vypisování chyb v souboru .htaccess:
php_flag display_errors On
kordy
Profil
jak se dostanu k souboru.htaccess teda takhle já ho nikde nevidím mám ho vytvořit?
co by ten soubor měl obsahovat kromě toho + jak by se měl jmenovat... mám ho nějak zohlednit v kódu jako například css v hlavičce?
dík za odpovědi
Davex
Profil
Pokud soubor neexistuje, tak je potřeba ho vytvořit a pojmenovat ho .htaccess (s tečkou na začátku). Je to čistě textový soubor ve kterém nemusí být nic jiného než konfigurační volba pro webový server Apache/nastavení PHP z [#7].
kordy
Profil
naštěstí to na webzdarma vypisuje zjistil jsem, že na 12 řádku chyběly úvozovky dál je chyba ještě na řádku 21, kterou jsem fakt nenašal teda přesně to vypisuje todle:
Warning: move_uploaded_file(): Unable to access /slozky/Bez nazvu.jpg in /3w/kvalitne.cz/h/hrajusi/admin/upload.php on line 21

dovede ji najít někdo z Vás? díky
Davex
Profil
Soubor se snažíš uložit mimo svůj prostor do neexistujícího adresáře /slozky/ na serveru. V cestách k souborům nepoužívej lomítko na začátku.
kordy
Profil
Davex:
#9
postupoval jsem podle tvých rad, teď vypisuje tohle
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, hostmaster@bluehost.cz and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.


po smázání souboru se vše vrátilo z5


Davex:
#11
díky to zkusím :)
kordy
Profil
tak jo funuguje skoro :D
teď píše tohle
Warning: chmod(): No such file or directory in /3w/kvalitne.cz/h/hrajusi/admin/upload.php on line 23
a ten nový soubor nejspíš přepisuje ten starý... :(
tak už vůbec nevím
Keeehi
Profil
kordy:
Snažíš se měnit práva souboru, který neexistuje, nebo je někde jinde. (script upload.php, řádek 23)
Davex
Profil
kordy:
Internal Server Error
Tato chyba může nastat ve dvou případech:
1) na serveru není povoleno používat některou konfigurační volbu v souboru .htaccess (v tvém případě php_flag nebo php_value)
2) soubor není uložen jako čistý textový soubor (např. v Notepadu) bez BOM - v Notepadu pomůže uložení do kódování "ANSI" (na této diskusi řešeno v Nefungující .htaccess na wz.cz nebo .htaccess hází Error 500 - ale pouze na doméně )
kordy
Profil
Davex:
Tato chyba může nastat ve dvou případech:
myslím, že se jí nebudu zabývat můžu si vše vyzkoušet na webzdarma.cz

Keeehi:
Snažíš se měnit práva souboru, který neexistuje, nebo je někde jinde. (script upload.php, řádek 23)
no moc moudrej z roho nejsem mohl bys mi to přiblížit, znamená to, že mám změnit cestu? Doteď tam totiš byla ta stejná a fungovalo to bez této hlášky...
Keeehi
Profil
V souboru upload.php je na řádku 23 funkce chmod(); Této funkci jako první parametr předáš soubor (cestu k souboru) u kterého má změnit práva, která jí předáš v druhém parametru. Problém je v tom, že se tato funkce pokouší změnit práva u souboru, který se ale nenalézá tam, kde jsi napsal že je (první parametr).

Můžeš zkusit prostě tu funkci smazat, nebo si oprav tu cestu.
kordy
Profil
na tom řádku jsem udělal takovouto změnu
 chmod ("slozky/".$soubor_name, 0777);

tedy dopsal složku a dal ji do uvozovek, zbavil jsem se sice hlášky, ale soubory se STÁLE PŘEPISUJÍ
Davex
Profil
kordy:
myslím, že se jí nebudu zabývat můžu si vše vyzkoušet na webzdarma.cz
Asi by bylo praktičtější, nainstalovat si XAMPP, WampServer nebo EasyPHP a zkoušet si to na vlastním PC.
kordy
Profil
Davex
díky něco takovýho určitě zkusím(přemýšlel jsem o tom už dřív), ale odbíháme od tématu soubory se stále přepisují :(, přestože již nevypisuje žádnou chybu(tedy už ani to nenapoví...)
Keeehi
Profil
if ($ok == "Upload" && $soubor_name!="")
{
    if (file_exists("galerie/$soubor_name")){ // pokud soubor existuje
        $soubor_name=time()."_".$soubor_name; // přidáme mu jako prefix time();
    }
    
    if (move_uploaded_file($soubor, "galerie/$soubor_name"))
        {
        chmod ("slozky/".$soubor_name, 0777);
        echo "<b>Soubor $soubor_name byl nahran na server</b><BR>";
        }
    else
        {
        echo "<b>Chyba - soubor nebyl nahran</b><BR>";
        }
}
kordy
Profil
Teď kód vypadá takhle

<HTML>
<HEAD><TITLE>Upload</TITLE></HEAD>
<BODY>
<b>Zadejte jmeno souboru:</b>
<FORM ACTION="upload.php" METHOD="post" ENCTYPE="multipart/form-data">
<INPUT TYPE="file" NAME="soubor" SIZE="40">
<INPUT TYPE="submit" NAME="ok" VALUE="Upload">
</FORM>
<?php
  $delimiter = strrpos($soubor_name, '.');
  $filename = $soubor_name;
  for ($i = 2; file_exists("/galerie/$filename"); $i++)  
  {
    $filename = substr($soubor_name, 0, $delimiter).'_'.$i.substr($soubor_name, $delimiter);
  }
$soubor = ($_FILES["soubor"]["tmp_name"]);
$ok = ($_POST["ok"]);
if ($ok == "Upload" && $soubor_name!="")
{
    if (file_exists("/galerie/$soubor_name")){ // pokud soubor existuje
        $soubor_name=time()."_".$soubor_name; // přidáme mu jako prefix time();
    }  
    if (move_uploaded_file($soubor, "/galerie/$soubor_name"))
        {
        chmod ("slozky/".$soubor_name, 0777);
        echo "<b>Soubor $soubor_name byl nahran na server</b><BR>";
        }
    else
        {
        echo "<b>Chyba - soubor nebyl nahran</b><BR>";
        }
}
?>
</BODY>
</HTML>


a vypisuje tuhle chybu
Warning: move_uploaded_file(): Unable to access /galerie/Bez nazvu.jpg in /3w/kvalitne.cz/h/hrajusi/admin/upload.php on line 23

tedy v tvojem kódu je to řádek 7 (ten v #21 )
Keeehi
Profil
kordy:
Jak psal Davex v [#11], máš tam lomítko v cestě navíc. Odstraň z řádků 12, 20 a 23 první lomítko z adresy a mělo by to být v pořádku. (za řádek 20 se omlouvám, když jsem adresu kopíroval, neuvědomil jsem si že je v ní chyba)
kordy
Profil
to jsem si taky uvědomil a změnil kód, nezaznamenal jsem změnu, tak jsem to sem ani nepsal...
(teda jedna změna je v chybě je o jedno lomítko míň)
Keeehi
Profil
kordy:
je složka galerie ve složce admin? Pokud ne, tak zase na výše popsaných řádcích změňte adresu tak, že na začátek přidáte ../ (znamená to o úroveň výše).

Pokud to nebude fungovat, tak sem napište adresářovou strukturu.
Alphard
Profil
kordy:
Vaše úpravy ve stylu zkopírovat co jde k cili nevedou.

Já jsem ve svém kódu použil (i když zbytečně) vaše proměnnou $soubor_name. Vy jste si toho ani nevšiml, dal zkopírovaný kód před přiřazení a proměnnou ještě přejmenoval.

Stejně tak jste se asi nezamyslel nad tím, že proměnná $filename je podstatná a měl byste ji použít jako cílové jméno souboru…

Projděte si každý řádek kódu a zamyslete se nad tím, co dělá a jak to má fungovat, třeba to pomůže.
kordy
Profil
admin/upload.php
admin/slozky/galerie
(klidně se můžou rozbalit třeba ve slozky teď je to nedůležité)
ale cesta je věc která se může kdykoli změnit chci se dostat k funkčnosti pak si pořeším jak budou vypadat složky...
Keeehi
Profil
kordy:
A vám nepřijde divné, že v cestě galerie/$soubor_name chybí složka slozky?

Relativní a absolutní cesty.
kordy
Profil
Keeehi:
A vám nepřijde divné, že v cestě galerie/$soubor_name chybí složka slozky?
jo taaaak asi jste si to špatně vysvětlil.
Na hostingu od bluebardu to je galerie/$soubor_name a na webzdarma je to tak jak jsem psal v #27 omlouvám se plynule jsem přešel z jednoho na druhý aniž bych Vám to řekl...ale vlastně máte pravdu při přechodu z jednoho na druhý jsem si neuvědomil, že je třeba změnit cesty tím pádem to nefungovalo dík moc za pomoc při hledání a za Váš čas moc jste mi pomohli! Ještě jednou dík
kordy
Profil
Trochu jsem myslel a postupně tento kód upravoval úmyslem bylo vytvářet z těchto souborů automaticky galerii(skoro se mi to povedlo), jenomže když mi zapíše první obrázek a uploaduju další přepisuje ten první proč?

tady je kód, pomohli by jste mi to prosím vyřešit? Myslím, že bude chyba někde v metodách zápisu ale ať dělám cokoli nemůžu na to přijít...

  $delimiter = strrpos($soubor_name, '.');
  $filename = $soubor_name;
  for ($i = 2; file_exists("slozky/$filename"); $i++)  
  {
    $filename = substr($soubor_name, 0, $delimiter).'_'.$i.substr($soubor_name, $delimiter);
  }
$soubor = ($_FILES["soubor"]["tmp_name"]);
$ok = ($_POST["ok"]);
if ($ok == "Upload" && $soubor_name!="")
{
    if (file_exists("slozky/$filename")){ // pokud soubor existuje
        $soubor_name=time()."_".$filename; // přidáme mu jako prefix time();
    }  
    if (move_uploaded_file($soubor, "slozky/".$filename))
        {
        chmod ("slozky/".$filename, 0777);
        echo "<b>Soubor $filename byl nahran na server</b><BR>";
        }
    else
        {
        echo "<b>Chyba - soubor nebyl nahran</b><BR>";
        }
}
$soubor = "slozky/soubor.html"; // název souboru
$ot = fopen($soubor, "w"); // otevøení souboru
fwrite($ot, "<head>".'<link rel="shortcut icon" type="image/ico" href="/images/favicon.gif" /> '.'<link rel="stylesheet" href="css/screen.css" type="text/css" media="screen" />'.'<link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />');

fwrite($ot, '<script src="js/prototype.js" type="text/javascript"></script>'.'<script src="js/scriptaculous.js?load=effects,builder" type="text/javascript"></script>'.'<script src="js/lightbox.js" type="text/javascript"></script>'.'</head><body>') ; 
fclose($ot); 
  

$zapis = fopen("slozky/soubor.html", "a+");
fwrite($zapis, "<body><a href="."'$filename'"."rel='lightbox[roadtrip]'>"."<img src='".$filename."'>"."</a>");
fclose($zapis);
« 1 2 »

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