ugrás a tartalomhoz

kép feltöltése nem megy új szerveren

MSzilveszter · 2006. Szep. 28. (Cs), 12.44
Sziasztok!

A héten cseréltünk szervert, vagyis tárhelyet csak, és a régi feltöltés funkció nem működik.

ezzel hívom meg:
if($_FILES['cikk_kep1']['tmp_name']) $cikk_kep_name1 = "ck_".date("YmdHis")."ck_".$_SESSION['userid'].'1'.date("mHdsiY").'.jpg';
else $cikk_kep_name1 = '';
createthumb('cikk_kep1', $cikk_kep1_name, $cikk_kep_name1);


és ez végzi a feltöltést:

function createthumb($cikk_kep, $cikk_kep_name, $cikk_kep_name1) {
    $thumb_w = 100;
    $thumb_h = ($thumb_w/4)*3;
    $prefix = "../valami/valami/valami2";
if (strlen($cikk_kep_name) > 3) {
$kiterjesztes = copyfrom($cikk_kep_name, strlen($cikk_kep_name)-3, strlen($cikk_kep_name));
} else {
$kiterjesztes = "";
}
    if($cikk_kep != '') {
if(is_uploaded_file($_FILES[$cikk_kep]['tmp_name'])){
if (chmod($_FILES[$cikk_kep]['tmp_name'], 0644)){
if (move_uploaded_file($_FILES[$cikk_kep]['tmp_name'],$prefix.'/'.$_FILES[$cikk_kep]['name'])){
}else{
print "problémák adódtak a feltöltéssel, próbálkozzon újra 3 <BR>";
exit;
}
}else{
print "problémák adódtak a feltöltéssel, próbálkozzon újra 2 <BR>";
exit;
}
}else{
print "problémák adódtak a feltöltéssel, próbálkozzon újra 1 <BR>";
exit;
}
    }
  }  // function vége



hibával sehol nem áll ki, rendesen "feltölti", utána pedig hiba üzenet érkezik a cikk megjelenésnél, hogy nincs ilyen fájl, a szerveren sem jelenik meg a fájl...

Van valamilyen ötletetek?

Előre is köszi:

Szilveszter
 
1

Kép feltöltése

Anonymous · 2006. Szep. 28. (Cs), 13.16
A $cikk_kep1_name változó hol kap értéket?
A $cikk_kep_name1 változót miért adod át a functionnak, ha semmire se használod?
Szóval szerintem itt a változónevek vannak összekeverve rendesen.

Gyulus
2

igazad van...

MSzilveszter · 2006. Szep. 28. (Cs), 15.23
volt egy korábbi verzió, és ot thasználtam a másikat, ami ott maradt, és üres értékként ment át.

amúgy gondoltam arra, hogy a következő sorok az egyetlenek, amik pluszba bekerültek a scriptbe, mivel a register_globals ki van kapcsolva a szerveren ahova jöttünk.

if (!ini_get('register_globals')) {
     $types_to_register = array('GET','COOKIE', 'POST', 'SESSION', 'SERVER');
     foreach ($types_to_register as $type) {
         if (@count(${'HTTP_' . $type . '_VARS'}) > 0) {
             extract(${'HTTP_' . $type . '_VARS'}, EXTR_OVERWRITE);
         }
     }
}


a kódot meg letisztáztam:
meghívás:
if($_FILES['cikk_kep1']['tmp_name']) $cikk_kep_name1 = "ck_".date("YmdHis")."ck_".$_SESSION['userid'].'1'.date("mHdsiY").'.jpg';
else $cikk_kep_name1 = '';
createthumb('cikk_kep1', $cikk_kep_name1);
if($_FILES['cikk_kep2']['tmp_name']) $cikk_kep_name2 = "ck_".date("YmdHis")."ck_".$_SESSION['userid'].'2'.date("mHdsiY").'.jpg';
else $cikk_kep_name2 = '';
createthumb('cikk_kep2', $cikk_kep_name2);


és maga a feltöltés:

function createthumb($cikk_kep, $cikk_kep_name1) {
    $prefix = "../images/cikkek/";
if(is_uploaded_file($HTTP_POST_FILES[$cikk_kep]['tmp_name'])){
if (chmod($HTTP_POST_FILES[$cikk_kep]['tmp_name'], 0644)){
if (move_uploaded_file($HTTP_POST_FILES[$cikk_kep]['tmp_name'],$prefix.'/'.$cikk_kep_name1)){
}else{
print "problémák adódtak a feltöltéssel, próbálkozzon újra 3 <BR>";
exit;
}
}else{
print "problémák adódtak a feltöltéssel, próbálkozzon újra 2 <BR>";
exit;
}
}else{
print "problémák adódtak a feltöltéssel, próbálkozzon újra 1 <BR>";
exit;
}
  }  // function vége
3

igazad van...

Anonymous · 2006. Szep. 28. (Cs), 15.43
Hihetetlenül bonyolultan programozol. :)

Mivel nem próbáltam ki a kódot, ránézésre pár dolog. A $prefix-nek jó lenne teljes útvonalat megadni, illetve fura, hogy a kód egyik részében $_FILES-t használsz, a másikban meg $HTTP_POST_FILES-t. Ennek mi az oka?
Miért nem rakod az egész dolgot egy ciklusba? A file mezőket úgy nevezhetnéd el, hogy
<input type="file" name="cikk_kep[]">
<input type="file" name="cikk_kep[]">
<input type="file" name="cikk_kep[]">
Így feltöltéskor kapnál egy tömböt, amit ciklusban levezényelhetnél.
A következő, hogy szerintem felesleges használni (legalábbis teszt alatt) az is_uploaded_file függvényt is meg a move_uploaded_file függvényt is. Az utóbbi bőven elég:
if(!@move_uploaded_file($mit,$hova)) {
	print "problémák adódtak a feltöltéssel, próbálkozzon újra 3 <BR>";
}

Aztán, ha jól megy, bővíthetnéd chmod-dal, meg ilyesmikkel.

Tehát: egyszerű kódot, könnyebb debugolást.

Gyulus
4

Köszi!

MSzilveszter · 2006. Szep. 28. (Cs), 16.02
Gyulus!

Ez a kód így ahogy van már ment május óta hiba nélkül :(.
Csak itt, az új tárhelyen nem, azért ven benne chmod meg ilyesmi.

Megnéztem egy teljesen más módszerrel, ftpt nyitottam, betallóztam a könyvtárat, és fput() segítségével próbáltam. Sikertelenül... Nem kapja meg a fájl nevét, egyáltalán nem jön át a $cikk_kep érték a formból, vagyis azt látja, hagy megvan adva, de üresnek érzi.
Kipróbálom amit írtál, este megirom, hogy sikerült e valamit kezdeni vele.

ui.: tudom, hogy bonyolultan programozok :). Épp így szeretem :$.
5

megcsináltam, de

MSzilveszter · 2006. Szep. 29. (P), 15.56
ez sem jött össze.
$ertekx = 9;
foreach($cikk_kep as $parameter1)
{
if(!empty($parameter1))
{
$cikk_kep_name1 = "ck_".date("YmdHis")."ck_".$_SESSION['userid'].$ertekx.date("mHdsiY").'.jpg';
if(!@move_uploaded_file($parameter1,'../images/cikkek/'.$cikk_kep_name1)) print "problémák adódtak a feltöltéssel, próbálkozzon újra 3 <BR>";
else print"feltöltve a fájl<BR />";
$ertekx--;
}
}


az, ami feltölti, és

<input type="file" name="cikk_kep[]"><br>
<input type="file" name="cikk_kep[]"><br>
<input type="file" name="cikk_kep[]"><br>


az ami a formba került bele.

A következő hibát dobja ki:
"Warning: Invalid argument supplied for foreach() in /......./index.php on line..."

Szerintetek mi a hiba?
6

ÉS IGEN!

MSzilveszter · 2006. Szep. 29. (P), 20.17
Nem a forráskóddal van a gond.
Egyszerűen nem adja át a $cikk_kep[] paramétert. Ha definiálom elötte, bármivel, akkor nem áll ki hibaüzenettel.
Tehát a kód jó, a server van rosszul beállítva?
A hiba azóta van, hogy :
if (!ini_get('register_globals')) {
     $types_to_register = array('GET','COOKIE', 'POST', 'DATA', 'SESSION', 'SERVER'); //
     foreach ($types_to_register as $type) {
         if (@count(${'HTTP_' . $type . '_VARS'}) > 0) {
             extract(${'HTTP_' . $type . '_VARS'}, EXTR_SKIP); //EXTR_OVERWRITE
         }
     }
}

sorokkal visszaszedem azokat a paramétereket, amiket postolok vagy a sessionban tárolok, mert a php úgy van konfigurálva, hogy

register_globals = OFF


és ez szerintetek okozhatja a hibáta feltöltésnél?

A session_register() se működött tőle, azért gondolom... Hátha ez a gond :).

Vélemény?
7

ÉS NEM!

Anonymous · 2006. Szep. 29. (P), 23.13
Úgy látom, hogy a HTTP_POST_FILES tömböt nem "szeded vissza". Akkor miért várod az említett register_globals = OFF beállítás mellett, hogy a $cikk_kep-et átvegye?
Miért harcolsz ezzel az extract-tal? Miért nem használod ezeket a változókat úgy, ahogyan "illik"?
foreach($_FILES['cikk_kep'] as $parameter1) ...
Feleslegesen bonyolítod az életedet.

Egyébként a foreach ciklusod szerintem nem jó, majd ha sikerül átvinned végre a $_FILES tömböt, akkor mielőtt cikusba kezdesz, a print_r() függvénnyel irasd ki, nézd meg, hogy mi van benne, és aszerint írd meg a foreach-et, vagy inkább a for ciklust.

Gyulus
8

Megoldottam

MSzilveszter · 2006. Szep. 30. (Szo), 00.18
Köszönöm a segítséget!
Jobb lett mint régen. Ennek örömére megmutatom az eredményt.


$ertekx=1;
foreach($_FILES['cikk_kep']['tmp_name'] as $parameter1)
{
if(!empty($parameter1))
{
$cikk_kep_name[$ertekx] = "filenamesablonneve.jpg";
$hova = '../eleresiut/'.$cikk_kep_name[$ertekx];
if($_FILES['cikk_kep']['type'][$ertekx] == 'image/jpeg')
{
if($_FILES['cikk_kep']['size'][$ertekx] < 307201) // 300 kilobajt
{
if(!@move_uploaded_file($parameter1,$hova)) print "problémák adódtak a feltöltéssel, próbálkozzon újra 3 <BR>";
else print('<div class="alulkeret"> A fájl feltöltve: '.$cikk_kep_name[$ertekx].' <br>(temp név: '.$_FILES['cikk_kep']['tmp_name'][$ertekx].' típus: '.$_FILES['cikk_kep']['type'][$ertekx].' eredeti név: '.$_FILES['cikk_kep']['name'][$ertekx].'</div>');
}
else
{
echo('<div align="center" class="alulkeret"><font color="#FF0000"><b>HIBA, a kép mérete több, mint háromszáz kilobájt! </b></font><br>('.$FILES_['cikk_kep']['name'][$ertekx].'</div>');
}
}
else
{
echo ('<div align="center" class="alulkeret"><font color="#FF0000"><b>HIBA, a kép NEM JPG! formátumú!</b></font><br>('.$_FILES['cikk_kep']['name'][$ertekx].') </div>');
}
}
$ertekx++;
}


:).
9

foreach

Anonymous · 2006. Szep. 30. (Szo), 00.41
Egy aprócska kötekedés...
A foreach manuál szerint, ha jól használjuk, a $kulcs változóban lesz a ciklusváltozó, tehát nincs szükség az $ertekx bevezetésére, és kézi növelésére.

Gyulus
10

Igényességet kéne belecsempészni

Marcell · 2006. Okt. 5. (Cs), 22.30
Én csak pár formai dologba kötnék bele így hirtelen. Már mondták páran, és tényleg: hihetetlen gány a kódod, abszolút nem lehet átlátni, hogy miért is van úgy ahogy. Az egész kód úgy fest, mintha 3 perc alatt csaptad volna össze, pedig mint mondtad már elég régi darab.

Blokkosítsd logikai részek szerint, tördeld be, használj tabulátort, behúzásokat. Lehet azt mondani, hogy 'á ez nekem megfelel', de ha csapatban dolgoztok majd, a másik kódját is át kell látnod minnél gyorsabban - és nyilván először fogod azt a 100 sort látni, mert pontosan azért dolgoztok csapatban, hogy Neked ne kelljen a kód azon részét a végső összefűzés előtt látnod. Másrészt ha pl a Weblaborra postolsz, magadnak teszel jót, ha egyértelmű kódot adsz a kezünkbe, mert sokkal többen és gyorsabban tudnak majd segíteni.

Használj értelmes változóneveket. A $cikk_kep, $cikk_kep_name, $cikk_kep_name1 pont három baromi hasonló név, egy hét múlva már nem fogsz emlékezni arra, hogy melyiket mire is használtad és megint a kódot kell majd bújni. Van egy olyan íratlan szabály is, hogy egy nyelven érdemes a változók neveit megfogalmazni, tehát a $cikk_kep_name tipikusan rossz változónév.

Ha már hibakezelést próbálsz beépíteni, legalább valamit mondjon is a hiba. A "problémák adódtak a feltöltéssel, próbálkozzon újra 1, 2, 3" nem túl beszélő nevek és nem utalnak a hiba okára.

Ha be is fejezel egy weboldalt, később akkor is előfordulhat olyan, hogy vissza kell térned a kódhoz - mint pl most teszed. Egy szál értelmes komment nélkül esélyed sincs x órán belül rájönni, hogyan is folyik a program logikája.

Szokj meg kompletten egy programozói stílust. Nekem személyesen a K&R jön be, de ez már tényleg magánügy (kivéve ha a csapat megszab egy követendőt).