Upload súborov s premenovaním diaktrických znamienok

Programovacie jazyky, rady, poradňa...
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Upload súborov s premenovaním diaktrických znamienok

Príspevok od používateľa ThunderBoy »

Zdravim

Pouzivam jednoduchy skript pre upload suborov na ftp, ktory mi celkom postacuje, ale niektori ludia nevedia citat a posielaju mi tam subory, ktore maju v nazve suboru makcene, dlzne a podobne haluziny. S takyto suborom nedokazem na ftp nic spravit. Neda sa otvorit, vymazat, prezerat, stiahnut.... Bol by som velmi rad, keby mi niekto do toho skriptu doplnil nejake premenovanie suborov pri uploade, pripadne doplnil aj zobrazeny text pri chybnom uploade.

Dnes som od obeda prehrabal net a kadeco zaujimaveho nasiel, ale nic z toho som nedokazal dotiahnut do funkcnosti. Ziadny subor mi nepremenovalo a pripadnu chybovu hlasku nevyhodilo.
Html rozumiem celkom dobre, ale php je pre mna spanielska dedina. :sneaky:
Dakujem za pripadnu pomoc.

Tu je moj php skript:

Kód: Vybrať všetko

<?php
$priecinok = "zaslane-subory";

if( is_uploaded_file($_FILES['subor']['tmp_name']))
{
if( move_uploaded_file($_FILES['subor']['tmp_name'], "./".$priecinok."/".$_FILES['subor']['name']) )
{
$sprava = "Súbor <strong>".$_FILES['subor']['name']."</strong> bol uložený na server.";
$vypis = "".$_FILES['subor']['name']."";
}
}
?>
Dalej to pokracuje html kodom a tam su este tieto dve php premenne na dvoch miestach:

Kód: Vybrať všetko

<?php echo $vypis; ?> <?php echo $sprava; ?>
Premennu $vypis tam potrebujem, pretoze s nazvom uploadovaneho suboru sa pracuje dalej. Premenna $sprava by sa mala zobrazovat pri uspesnom i neuspesnom uploade na rovnakom mieste.

Kod na tejto stranke http://diskuse.jakpsatweb.cz/?action=vt ... pic=156730 bol pre mna zaujimavy, ale ako pisem hore, nedokazal som ho prisposobit do mojho kodu. :?
xadman
Medium Star
Medium Star
Príspevky: 305
Registrovaný: 09 mar 2011, 17:02

Re: Upload súborov s premenovaním diaktrických znamienok

Príspevok od používateľa xadman »

Toto si skúšal ?

Kód: Vybrať všetko

$rename = strtr($name,"áčďéěíňóřšťúůýž ÁČĎÉĚÍŇÓŘŠŤÚŮÝŽABCDEFGHIJKLMNOPRSTUVWXZ","acdeeinorstuuyz_acdeeinorstuuyzabcdefghijklmnoprstuvwxz");
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Re: Upload súborov s premenovaním diaktrických znamienok

Príspevok od používateľa ThunderBoy »

xadman napísal:Toto si skúšal ?

Kód: Vybrať všetko

$rename = strtr($name,"áčďéěíňóřšťúůýž ÁČĎÉĚÍŇÓŘŠŤÚŮÝŽABCDEFGHIJKLMNOPRSTUVWXZ","acdeeinorstuuyz_acdeeinorstuuyzabcdefghijklmnoprstuvwxz");
Ano, to som skusal, ale subor nebol zmeneny. Mozno som to nedal do kodu na spravne miesto, ale chybu nevypisovalo. Podla mna by to malo byt niekde zakomponovane az pri presuvani suboru na server pri move_uploaded_file. Aspon tak som to pochopil. Toto funguje skor samostatne. Opravte ma, ak sa mylim.
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Upload súborov s premenovaním diaktrických znamienok

Príspevok od používateľa *****HERO***** »

Kód: Vybrať všetko

setlocale(LC_ALL, "en_US.UTF-8");

$priecinok = "zaslane-subory";

if (is_uploaded_file($_FILES['subor']['tmp_name'])) {
    $baseName = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $_FILES['subor']['name']);
    if (move_uploaded_file($_FILES['subor']['tmp_name'], "./" . $priecinok . "/" . $baseName)) {
        $sprava = "Súbor <strong>" . $_FILES['subor']['name'] . "</strong> bol uložený na server.";
        $vypis = "" . $_FILES['subor']['name'] . "";
    }
}
tu to mas komplet a krajsie
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Re: Upload súborov s premenovaním diaktrických znamienok

Príspevok od používateľa ThunderBoy »

*****HERO***** napísal:

Kód: Vybrať všetko

setlocale(LC_ALL, "en_US.UTF-8");

$priecinok = "zaslane-subory";

if (is_uploaded_file($_FILES['subor']['tmp_name'])) {
    $baseName = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $_FILES['subor']['name']);
    if (move_uploaded_file($_FILES['subor']['tmp_name'], "./" . $priecinok . "/" . $baseName)) {
        $sprava = "Súbor <strong>" . $_FILES['subor']['name'] . "</strong> bol uložený na server.";
        $vypis = "" . $_FILES['subor']['name'] . "";
    }
}
Dik, ale nefunguje to. Vyhadzuje toto:

Kód: Vybrať všetko

Warning: move_uploaded_file(./zaslane-subory/) [function.move-uploaded-file]: failed to open stream: Is a directory in /home...public_html/upload.php on line 10

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 
Ten riadok 10 je toto: if (move_uploaded_file($_FILES['subor']['tmp_name'], "./" . $priecinok . "/" . $baseName)) {

Inak som to uz vyriesil. Nahodou ma napadlo, ze ci nebude chyba len v kodovani pristupu na ftp, co sa mi aj potvrdilo, ked som zmenil kodovanie pristupu z automatiky (UTF8) na 1250 alebo ANSI.
Ale potesilo by ma, keby mi dobra dusa upravila ten moj originalny kod, aby mi vyhodilo spravu aj pri neuspesnom uploade.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Upload súborov s premenovaním diaktrických znamienok

Príspevok od používateľa audiotrack »

to myslíš vážne že nevieš za podmienku dopísať else vetvu?

Kód: Vybrať všetko

 
if(move_uploaded_file(...)){
.
.
.
}
else {
    $sprava = "chyba uploadu";
}
nechce sa mi to všetko písať, tak som vybodkoval
Napísať odpoveď