kép feltöltése nem megy új szerveren
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:
és ez végzi a feltöltést:
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
■ 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);
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
$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
Kép feltöltése
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
igazad van...
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.
$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:
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:
$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
igazad van...
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
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:
Aztán, ha jól megy, bővíthetnéd chmod-dal, meg ilyesmikkel.
Tehát: egyszerű kódot, könnyebb debugolást.
Gyulus
Köszi!
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 :$.
megcsináltam, de
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>
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?
ÉS IGEN!
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 :
$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
é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?
ÉS NEM!
Miért harcolsz ezzel az extract-tal? Miért nem használod ezeket a változókat úgy, ahogyan "illik"?
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
Megoldottam
Jobb lett mint régen. Ennek örömére megmutatom az eredményt.
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++;
}
:).
foreach
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
Igényességet kéne belecsempészni
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).