Löysin netistä valmiin upload.php scriptin, jonka avulla kuka tahansa voi ladata kuvia palvelimelleni. Sain kaiken säädettyä onnistuneesti kuntoon, mutta myöhemmin huomasin, että jos joku lataa saman nimisen kuvatiedoston jonka kansio jo valmiiksi sisältää, se korvaa sen.
Pystyisikö kukaan auttamaan, että miten tehdä php koodipätkä, joka muuttaisi ladattavan kuvatiedoston nimeä, jos kansio jo sisältää saman nimisen tiedoston?
Tässä vielä linkki josta latasin tuon php filun:
Esim. näin:
file_exists
Jostain syystä en saa tuota millään toimimaan. Herjaa tämänlaista: "Fatal error: Call to undefined function: scandir() in /home/*******/public_html/upload/index.php on line 13"
Oothan huomannu, että scandir-funktio on mukana vasta PHP5:ssa?
Blaze kirjoitti:
Oothan huomannu, että scandir-funktio on mukana vasta PHP5:ssa?
Hmm, sehän sen selittääkin joo. Palvelimella on käytössä PHP-versio 4.4.4, joten minkä komennon tuon scandir:n tilalle sitten laittaisi?
Siellä scandirin manuaalisivullahan noita on valmiita korvaavia, senkun kopioi.
Funktio glob toimii lähes samalla tavalla ja on käytössä PHP:n versiosta 4.3.0 alkaen.
(Vanhemmilla PHP:n versioilla on tarpeen kolmikko opendir, readdir ja closedir.)
Parempi tapa tarkistukseen on kuitenkin tsurigan esittämä file_exists - kaikkia tiedostoja ei toki tarvitse selata läpi, jos vain pitää tarkistaa, onko tietty tiedosto olemassa.
Ite ratkaisin tämän helpoimmalla tavalla (ehkä).
Jos kuva on olemassa, lisätään kuvan alkuun random luku.
Tämä koodi tosin lisää numeron aina, mutta ei kai sillä mitään väliä ole.
$nimi = $_FILES["file"]["name"]; while(file_exists($kohde.$nimi)); { $nimi = rand(100,900).$_FILES["file"]["name"]; }
PS: Katso koodivinkkini https://www.ohjelmointiputka.net/koodivinkit/
Quirzo kirjoitti:
Ite ratkaisin tämän helpoimmalla tavalla (ehkä).
Jos kuva on olemassa, lisätään kuvan alkuun random luku.Tämä koodi tosin lisää numeron aina, mutta ei kai sillä mitään väliä ole.
$nimi = $_FILES["file"]["name"]; while(file_exists($kohde.$nimi)); { $nimi = rand(100,900).$_FILES["file"]["name"]; }PS: Katso koodivinkkini https://www.ohjelmointiputka.net/koodivinkit/
24979-php-helppo-upload
Kokeilin tuota, mutta kun yritin ladata kuvaa palvelimelle, se alkoi herjaamaan seuraavaa: "Fatal error: Maximum execution time of 30 seconds exceeded"
Kyseessä on siis tuo " while(file_exists($kohde.$nimi)); ".
Tämä PHP ei taida oikein olla mua varten :D
Jaa.
Ton tarkoitus on muuttaa nimeä kunnes sitä ei oo olemassa.
Laita vaan näin:
if(file_exists(KUVANKOHDE)){ $nimi = rand(100,900).$_FILES["file"]["name"]; }
Tietty muutat noi tiednimet sopiviks.
Quirzo kirjoitti:
Ton tarkoitus on muuttaa nimeä kunnes sitä ei oo olemassa.
Näppärämpää vois olla käyttää aikaleimoja tiedostoniminä, kuten esim. 4chan tekee.
Quirzo kirjoitti:
Jaa.
Ton tarkoitus on muuttaa nimeä kunnes sitä ei oo olemassa.
Laita vaan näin:if(file_exists(KUVANKOHDE)){ $nimi = rand(100,900).$_FILES["file"]["name"]; }Tietty muutat noi tiednimet sopiviks.
Tein juuri niin kuin neuvoit, mutta tuo koodipätkä ei tunnu vaikuttavan scriptaan mitenkään, se ei myöskään anna mitään virheilmoitusta. Ehkä olisi parempi vain antaa olla, kun meikän tieto-taidot ei nähtävästi riitä...
Miltä nykyinen koodi näyttää?
Aihe on jo aika vanha, joten et voi enää vastata siihen.