Autor Zpráva
TrueFriend
Profil
Zdarvím, mám tento kód a potřeboval bych, aby vždy používal složku images a ne služku jako ve které je sluštěn.

$directory = opendir(getcwd());
while($filename = readdir($directory)){
  #ignore . and .. as well as existing thumbnails
  if((strlen($filename) > 2) && (strcasecmp(substr($filename, 0, 5), 'thumb') != 0)){
    $localext = substr($filename, -3);
    if(strcasecmp($localext, 'jpg') != 0)
      continue;
    else{
      array_push($jpegs, $filename);
    }
  }
}


Pokusil jsem se upravit takto, ale to nefunguje..

$directory = opendir(getcwd()."/images/");
while($filename = readdir($directory)){
  #ignore . and .. as well as existing thumbnails
  if((strlen($filename) > 2) && (strcasecmp(substr($filename, 0, 5), 'thumb') != 0)){
    $localext = substr($filename, -3);
    if(strcasecmp($localext, 'jpg') != 0)
      continue;
    else{
      array_push($jpegs, $filename);
    }
  }
}


Díky
Majkl578
Profil
Nepoužívej getcwd(), ale __DIR__ (dirname(__FILE__) pro staré PHP).
TrueFriend
Profil
Použil jsem tedy dirname:
$directory = opendir(dirname('images/'));

ale výsledek je stejný.

Dávám k dispozici celý kód.
Script má dělat to, že ze složky "images" načte jpg soubory a k nim vytvoří zmenšeniny s názvem "thumb_" na začátku názvu souboru.
Problém je ten, že načítá jpg soubory ze složky ve které je spuštěn php script a ne ze složky "images".
Zmenšeniny ukládá na správné místo - tj.do složky images.
Neadří se mi s tím hnout.

<?php

$template = "";
$thumbw = 0;
$thumbh = 130;
$perrow = 3;
$perpage = 9;
$tableborder = 0;
$tablewidth = "85%";
$cellspacing = 3;
$bgcolor = "#f0f0f0";
$fontface = "Verdana, Arial";
$fontsize = 2;
$showname = 0;
$showcoords = 1;
$showsize = 1;
$linkurl = "%picname%";

set_time_limit(0);

#Open the cwd and build a list of JPG files
$jpegs = array();
$directory = opendir(dirname('images/'));
while($filename = readdir($directory)){
  #ignore . and .. as well as existing thumbnails
  if((strlen($filename) > 2) && (strcasecmp(substr($filename, 0, 5), 'thumb') != 0)){
    $localext = substr($filename, -3);
    if(strcasecmp($localext, 'jpg') != 0)
      continue;
    else{
      array_push($jpegs, $filename);
    }
  }
}

sort($jpegs);
reset($jpegs);

#Now that we have the files, we need to create thumbs if
#they don't exist
foreach($jpegs as $var){
  if(!file_exists("images/thumb_$var")){
    if(!isset($pleasehold)){
      $pleasehold = 1;
      echo "<font face='$fontface' size='$fontsize'><b>Prosím počkejte...</b><br><br>Byly nalezeny nové obrázky v této galerii a musí se vytvořit pro Vás zmenšené náhledy.<br><br>Probíhá vytváření náhledu obrázku: ";
      flush();
    }
    echo "<font face='$fontface' size='$fontsize'>$var... </font>";
    flush();
    makejpegthumb("images/$var", $thumbw, $thumbh, "images/thumb_$var", 100);
  }
}
if($pleasehold){
  echo "<font face='$fontface' size='$fontsize'><br><br><b>Náhledy byly vytvořeny!</b>Nyní si je můžete níže prohlédnout.</font><br>";
}

#Build the navigation links
$nav = "<center><font face='$fontface' size='$fontsize'>";
#$numlinks = round(count($jpegs)/$perpage, 0);
$numlinks = (int)ceil(count($jpegs)/$perpage);
$linkstart = 1;
for($i=1; $i<=$numlinks; $i++){
  $nav .= "<a href='$_SERVER[PHP_SELF]?start=$linkstart' title='Go to page $i'><b>Strana $i</b></a> ";
  $linkstart += $perpage;
}
$nav .= '</font></center><br>';

$output = "$nav\n";

#It's time to display the gallery!
$picnum = (isset($_GET[start])) ? (($_GET[start] == 0) ? 0 : $_GET[start] - 1) : 0;
$output .= <<<EOT
<!-- Begin Gallerize Output - Gallerize from http://www.phplabs.com/ -->\n\n<table width="$tablewidth" border="$tableborder" cellspacing="$cellspacing" align="center">
EOT;
for($i=0; $i<(int)($perpage/$perrow); $i++){
  $output .= '<tr>';
  for($j=0; $j<$perrow; $j++){
    $output .= "<td align='center' valign='middle'>";
    if(file_exists($jpegs[$picnum])){
      $target = str_replace('%picname%', $jpegs[$picnum], $linkurl);
      $output .= "<a href=javascript:void(0); onClick=fullScreen('view.php?soubor=$target'); class='gradualfader' style='width: 95%'><img src='images/thumb_$jpegs[$picnum]' border='2' style='border-color: #000000' alt='Click to view $jpegs[$picnum]'></a>";
      if($showname == 1){
        $output .= "<br><font face='$fontface' size='$fontsize'><b>$jpegs[$picnum]</b></font>";
      }
      if($showcoords == 1){
        $coords = getimagesize($jpegs[$picnum]);
        $output .= "<br><font face='$fontface' size='$fontsize'>$coords[0] x $coords[1]</font>";
      }
      if($showsize == 1){
        $output .= "<br><font face='$fontface' size='$fontsize'><b>" . sprintf("%.02f", (float)(filesize($jpegs[$picnum]) / 1024)) . 'kB</b></font>';
      }
      $output .= "\n";
    }
    $picnum++;
  }
  $output .= '</tr>';
}
$output .= "</table><br>$nav\n\n";

$template = str_replace('%output%', $output, $template);
if($header){
  include($header);
}
echo $template;
if($footer){
  include($footer);
}

#Make a JPG thumbnail of a source image
function makejpegthumb($infile, $outxcoord, $outycoord, $outfile, $quality){
  $insize = getimagesize("$infile");

  $inxcoord = $insize[0];
  $inycoord = $insize[1];
  $inresource = imageCreateFromJPEG("$infile");

  if($outxcoord == 0){
    #auto-width: calculate new width based on ratio of old to new height
    $ratio = (float)($outycoord / $inycoord);
    $outxcoord = $inxcoord * $ratio;
  }
  else if($outycoord == 0){
    #auto-height: calculate new height based on ratio of old to new height
    $ratio = (float)($outxcoord / $inxcoord);
    $outycoord = $inycoord * $ratio;
  }

  $outresource = imagecreatetruecolor($outxcoord, $outycoord);

  $target_pic = imagecopyresampled($outresource, $inresource, 0, 0, 0, 0, $outxcoord, $outycoord, $inxcoord, $inycoord);
  imagejpeg($outresource, "$outfile", 85);
}

?>
Davex
Profil
Nebudu to luštit celé, ale kompletní cestu do podadresáře získáš složením cesty ke skriptu a názvu podadresáře:
dirname(__FILE__) . '/images/'
TrueFriend
Profil
Problém není v dirname, ... ten nekončí chybovou hláškou, ale vypadá to na
$jpegs
Al enejsem profík :)
TrueFriend
Profil
Tento problém jsem již zde na foru řešil. A 4 roky nikdo nebyl schopný pomoci. Stejný výsledek i tentokrát.
Přesto díky všem za pomoc. Můj problém je zdá se natolik složitým, že ho nikdo nedokáže vyřešit. A nebo je to zde "zabitý"... Tleskejme ... (a plačme).
Majkl578
Profil
Zbožňuji tento typ přístupu. Problém nebyl vyřešen do tří hodin, a proto jsou všichni neschopní a kašlou na Tebe. Vezmi v potaz, že tu nikdo není placený za pomoc, ani za luštění stovky řádků dlouhých nepřehledných scriptů. A už vůbec ne za odpověď v reálném čase.

Dobře tedy, i já jsem neschopný a už se nebudu snažit Ti pomáhat. Hodně štěstí u jiných dobrých duší.
TrueFriend
Profil
Přístup není nicmoc, ale myslím si, že 4 roky jsou dostatečně dlouhá doba, aby započala nějaká kolektivní práce.
Nejsem nějaká hospodská koza a nevolám operátorovi, aby vyřešil můj problém. Jsem tu z toho důvodu, abych se přiučil něco nového, když již s PHP dělám. To že se tu dělím o řešení problému není proto, aby ho za mě někdo vyřešil, ale uznávám své chyby, které jsou již za hranicí mého chápání. Proto zde jsem. Pomoc nevyžaduji, ale myslím si, že když se najdou na tomto fóru profíci, co mají chuť s něčím pomoci, tak budu za takovou pomoc rozhodně rád.

Že někdo odepíše, že je ten script moc dlouhý na to, aby se jím vůbec někdo zaobíral mne dosti překvapuje / udivuje..?
PHP scripty jsou holt dlouhé. IMHO: Kdyby to bylo něco krátkého tj.:málo složitého, tak bych hodně zvážil, jestli bych volil cestu zde někoho s mým problémem otravovat.
Přecijen si myslím, že to není o délce scriptu ale o šikovnosti odhalit chybu. Myslím, že neříkám nic nového, když říkám, že pro vyřešení problémů se scriptem stačí třeba i jen špatně napsaná uvozovka, nebo tečka. Bez ohledu na to jak je script dlouhý.
A myslím si, že právě zaobíráním se i scriptem, který není krátký / schopnost vyřešit problém takového scriptu má o to větší cenu, než když někdo vyřeší problém tím, že opraví ve scriptu na 3 řídky tečku, uvozovku nebo cokoliv jiného. (to s tou tečkou byl jen příklad).

Snad jsem dostatečně vysvětlil můj pohled na věc. A také mé "přesvědčení", že zde nejsem od toho, abysme řešili délku scriptu, ale chyby které obsahuje. Jsou scripty, které obsahují i několik desítek php souborů.... s přístupem do databází, includováním svouborů, atd atd atd...
Ve srovnání s tím, že tu vystavuji jen jeden php soubor, který nedělá nic jiného, než že načítá, zobrazuje a ukládá JPG soubory, si myslím není zase nic tak nereálného, co by nešlo vyřešit. Pokud se mne okolnosti snaží přesvědčit, že když je script dlouhý, tak nemá ani cenu ten problém řešit mne může jen utvrdit v tom, že je naprosto degradován význam toho fóra.

Jsou lidi, co čtou ve scriptu jako v knize... a jsou lidi, kteří bádají ve scriptu hodiny a hledají problém na Internetu, v knížkách, apod... a stejně na tu či onu věc nepříjdou. Já se řadím mezi obě tyto kategorie. A k tomu, abych byl lepším rozhodně potřebuju i cizí pomoc.
Rozhodně ne způsobem, žebych stopoval a čekal, až někdo odepíše. Ale na druhou stranu, problémy, které řeším chci vyřešit. Že jsem se ozval se stejným problémem po čtyřech letech my myslím nemůže mít nikdo za zlé, ba naopak. Dokazuje to jen fak,t že to co říkám myslím vážně. Pokud to někdo nepochopil, nebo nechápe... nechápu co tedy pak dělá na foru, které je k takovému účelu specializované.
Alphard_
Profil *
Hodně záleží na problému, nefunkčnosti spojené s adresářovou strukturou se na fóru řeší špatně. A vy tomu také moc nepomáháte. Napsat ale to nefunguje není dostatečný popis chyby. Odpovídající se nemá čeho chytit.

Budu-li hádat, že problém je v chybně zadané cestě, images se hledá v aktuální adresáři, to jsou základy sestavování cest. Kdyby jste se podíval do manuálu, zjistil byste, že se většinou zadává cesta z rootu.
Script si musíte odladit pro vlastní server, stačí dát
echo dirname('/images/');

a upravit do podoby správné cesty.
Dirname() ale pro opendir() ale ani není nutné, stačí správná relativní adresa:
opendir("/cesta/images");
Chamurappi
Profil
Reaguji na TrueFrienda:
Tuhle dlouhou přednášku na téma diskusních fór jsi psal proč? Očekáváš snad od ní, že povzbudí odpovídající k tomu, aby reagovali na tvůj dotaz?

Pokud se mne okolnosti snaží přesvědčit, že když je script dlouhý, tak nemá ani cenu ten problém řešit mne může jen utvrdit v tom, že je naprosto degradován význam toho fóra.
Já sice PHP neumím, ale vím, že když je (jakýkoliv) zdrojový kód dlouhý a jediný popis problému je, že to nefunguje, tak by se v něm vrtal jen blázen. Lépe lokalizuj místo a okolnosti vzniku chyby.


Reaguji na TrueFrienda ↓:
Díky, to jsem přesně chtěl — další přednášku o tom, jak (ne)hodnotit cizí příspěvky. Čím víc balastu sem napíšeš, tím míň lidí to bude číst. Mrháš energií na zoufalé a naprosto zbytečné moralizování, místo toho, abys rozebíral problém.
TrueFriend
Profil
Chamurappi:
Rozvíjet téma na téma proč jsem napsal to či ono nechci. Veškerou příčinou je jen a pouze to, že jsem tu požádal o pomoc. Nehledám důvody proč něco nejde vyřešit (jako někteří), hledám důvody, jak to vyřešit jde.
Také si myslím, že málo popisu nezaškodí. Ale nerozváděl jsem problém do hlouby, protože to situace nevyžadovala. Navíc řešení jak vidmo je dosti pestré. K čemu jinému je diskusní forum...? Rozhodně nemám zájem problém řešit problémem. Mám problém se scriptem. Pokud je toho málo, stačí se zeptat a napsat víc. Normálně... že se to směruje v cosi mne nezajímá a řešit to nebudu. Původní myšlenka byla řešit script. Že tu někdo začne řešit kdo a jak co píše jsem rozhodně netušil a nebudu již žádným způsobem dále komentovat a podporovat. Naprosto to není systematické!!! Jsem tu kvůli scriptům! Když má někdo problém pochopit o co mi jde, má se zeptat a ne komentovat co jsem napsal. Já to také nedělám!!! Pokud někdo žije na obláčku doufaje, že je každý dokonalý tak mám pro něj opravdovou novinu: NENÍ! Reagujte tedy v rámci možností a nevymýšlejte si kokotiny. Nesvědčí to jak fóru, tak řešení problému.

Chamurappi2 ↓:
Editovat již jednou napsaný příspěvek není třeba...

Alphard:
Děkuji za nasměrování. Snažil jsem se problém vyřešit tak, že jsem před všechny
$jpegs
přepsal na
'images/'.$jpegs
. Díky tomu se načtou obrázky ze složky images, ale načtou se i pozice
$perrow = 3;
a
$perpage = 9;
jako prázdná okénka s vypsanou hodnotou velikosti 4kB.
TrueFriend
Profil
Tak jsem se podíval na 20 posledních příspěvků co jsou předemnou. Abych zjistil jakým způsobem se tedy sděluje problém, a jakým způsobem se dále řeší.
Takže bych to shrnul takto: 11 problémů se řešilo způsobem "tady máš odkaz, třeba Ti to pomůže"
3 problémy se řešily přímou odpovědí typu "zkus tam napsat tohle, mělo by to fungovat"
a zbytek se řešil způsobem "to najdeš na google".

Z této mé "ministatistiky" tedy vyplývá, že pravděpodobnost, že se někdo nad scriptem opravdu zamyslí jsou jen 3 případy z 20ti.

Chápu tedy vaše rozhořčení, že můžete brát můj první příspěvek útočně... protože to co řeším já se opravdu na Google najít nedá (sám jsem to již hledal - a to dlouho) a odkazy na různá podobná řešení také nezabírají.
Na tento můj příspěvek tedy asi nenarazil někdo, kdo by ho měl zájem vyřešit na základě svých vlastních znalostí a zkušeností, než podle zkušeností hledání na Google a jiných diskuzních forech.
Je vidět, že 4 roky stačí k tomu aby se změnil postoj lidí na foru k řešení problémů. A to nemluvím o tom, že se najdou i tací, kteří spíše řeší kdo a co jak napíše, a tím jen okecává to, že ten problém vyřešit prostě neumí. Já ho nevyřešil 4 roky a přiznávám to. Ale že je tu tolik tupců, co začne rozebírat jakým způsobem, co a jak tu řeším ohledně PHP mě opravdu nenapadlo. Po dlouhém zvažování jsem usoudil, že to co najdu na tomto foru je přínosné, ale nic co bych tedy nenašel na Google, nebo na jiných forech... což dokazuje i má "ministatistika", která v 17ti případech z 20ti končí výsledkem takovým, že odpověď je jinde, než zde. Prosím moderátora / admina o zrušení účtu. Toto nemám zapotřebí. Přišel jsem sem pro pomoc při řešení věcí ohledně IT a ne ohledně lidských vztahů. Děkuji všem co přispěli (až na uživatele Alphard) za ponaučení pro příště... (samozřejmě to myslím ironicky).
Jediný uživatel Alphard měl snahu mi s problémem pomoci, dalších 5 uživatelů včetně jednoho moderátora řešili problém úplně jiný. Což také o něčem vypovídá... Opravdu... Díky!!
Davex
Profil
TrueFriend:
Jediný uživatel Alphard měl snahu mi s problémem pomoci, dalších 5 uživatelů včetně jednoho moderátora řešili problém úplně jiný.
Odpovědi [#2] a [#4] přesně řešily problém popsaný v [#1] a [#3]. V příspěvcích [#5] a [#11] se jedná o zcela jiné problémy, které nebylo možné z původního popisu uhodnout a při znalosti jen jednoho skriptu nelze odladit kompletní funkčnost aplikace.
Chamurappi
Profil
Reaguji na TrueFrienda:
a zbytek se řešil způsobem "to najdeš na google".
Pochybuju. Takový druh příspěvku zde nemá moc šancí na přežití, jsme raději cílem vyhledávačů než cestou k nim.

to nemluvím o tom, že se najdou i tací, kteří spíše řeší kdo a co jak napíše
Zejména ty. Proč místo těch zdlouhavých blábolů o úrovni fóra a analýz ostatních dotazů neupřesníš, s čím máš problém?
Zatím všichni, kdo ti v tomto vlákně odpovídají, jsou zdejší moderátoři. Ostatní nad tebou patrně zlomili hůl.

tím jen okecává to, že ten problém vyřešit prostě neumí
Na podkladě tvého popisu ten problém nikdo vyřešit neumí. Jsme prostě všichni moc blbí. A klidně to drze přiznáváme.

Prosím moderátora / admina o zrušení účtu.
Zamítá se.
AM_
Profil
TrueFriend:
Díky tomu se načtou obrázky ze složky images, ale načtou se i pozice
1
$perrow = 3;
a
1
$perpage = 9;
jako prázdná okénka s vypsanou hodnotou velikosti 4kB.
Coprosím? Já vidím dva příkazy přiřazení a žádnou pozici.
Jak vypadá prázdné okénko s vypsanou hodnotou? neumím si představit.
TrueFriend
Profil
AM:
Tak si ten script zkopíruj, ulož ho jako PHP soubor a přepiš všechny
$jpegs
na
'images/'.$jpegs
a nemusíš se ptát ;)
Je to bez databáze, bez include jakýchkoliv jiných souborů... jak snadné. Otevři si to například ve Firefoxu a uvidíš. Prázdné pozice místo obrázků a getsize zobrazí tyto prázdné pozice jako 4kB soubory.

Chamurappi:
Problém jsem dostatečně popsal. Pokud by někdo neopravoval / zpětně needitoval mé příspěvky, byl by zde odkaz na jiné forum kde jsem zadal ten samý dotaz a nikdo nemá problém s jeho pochopením. Volili spíše cestu zkopírování obsahu scriptu ... vložení do PHP někam na server a od dál se debata normálně odvíjí. A problém s pochopením problému nikdo nemá. Zde se volí nekompatibilní cesta formou dohadů, než pomoci. Věřím, že i vy máte zájem vyzkoušet nějaký ten script co není na internetu a nejen komentovat jak je dlouhý, špatný a cokoliv jiného. To už všichni víme a není to nic nového!

Davex:
To nevylučuji, ale nikdo se nenabídl, že by mi byl s problémem ochoten pomoci. Skoro každý tu podporuje jen snahu diskutovat o čemkoliv, jen ne o problému toho scriptu. Mylsím si, že kdyby někdo chtěl, vykašle se na tuto debatu a bude řešit script. Což můžeš i ty pokud chceš. Nikomu v tom nebráním a v podstatě čekám jen na to, že to někoho napadne.

Jak jsem řekl již dříve, děláte z tohoto fóra tlachací recesi a frašku... Takže někdo s konkrétním řešením konkrétního problému? Problém sem nastínil a kdo chce ať si script zkopíruje a sám si vyzkouší co to dělá a co ne... kdyby to někdo z vás už udělal, zjistí, že problém není žádný, protože script funguje!!!, (jak asi někdo stále nechápe)... ale jde jen o to, aby pracoval se soubory v určené složce a ne v hlavní složce, kde se nachází spouštěcí PHP script. Bude-li někdo namítat, že se nebude přehrabovat ve scriptu kvůli jeho délce, není to můj problém. Každá část je ve scriptu dostatečně viditelně označena a popsána co dělá. Je to sice anglicky, ale myslím, že s tím je ten nejmenší problém.

Opravdu je tak těžké pochopit "problém"?? Já myslím, že je to celkem jasné.
Pokud chce někdo pomoci, bude pro to také muset něco obětovat... čas, nebo úsilí otestování / vyzkoušení toho scriptu. To je nejspíše nutným předpokladem, pokud nezná někdo řešení "z hlavy". Za mě, ani za vás nikdo problém nevyřeší a stejně tak beru i vaši případnou pomoc. Díky..

Takže někdo s nějakým řešením konkrétního!! "problému"?
Chamurappi
Profil
Reaguji na TrueFrienda:
Pokud by někdo neopravoval / zpětně needitoval mé příspěvky, byl by zde odkaz na jiné forum kde jsem zadal ten samý dotaz
Tvé příspěvky nikdo kromě tebe neměnil. Zásahy moderátorů jsou uživatelsky viditelné.
Prosím o zmíněný odkaz na jiné fórum. Nedaří se mi ho najít vyhledávačem a toto vlákno nalezitelné je — až bude někdo další řešit stejný problém, bylo by fajn, kdyby tu našel aspoň odkaz na to jiné fórum.

Přepsat všechny $jpegs na 'images/'.$jpegs mi nedává moc smysl, protože $jpegs je pole. Zdroják, který uvádíš v příspěvku [#3], už se složkou images pracuje, ne? Neprovozuji žádný server, kde by běželo PHP. Jestli ses celé ty čtyři roky snažil říct, že skript obrázky správně zmenšuje na správném místě, ale pak je jen nezobrazí uživateli kvůli chybějící složce images v podmínce na řádku 79, tak si za ty matoucí výjevy odpověď nezasloužíš.
hlad22
Profil *
TrueFriend:
Díky tomu se načtou obrázky ze složky images, ale načtou se i pozice
>
1
>
$perrow = 3;
>
a
>
1
>
$perpage = 9;
>
jako prázdná okénka s vypsanou hodnotou velikosti 4kB.

čau, nechtěl bys to někam nahrát, třeba ne wz.cz, tohle si nepředstaví asi víc lidí.


Nicméně, teď k věci, možný problém který vidím já.
Výsledek z file_exists se ukládá do chache, takže ta podmínka na 79. řádku pravděpodobně nehodnotí to, co by měla, takže to dojíždí cyklus a chce načíst obrázky, který neexistujou, a proto tam vznikaj "prázdná okénka".
AM_
Profil
TrueFriend:
> [i]Tak si ten script zkopíruj,
a nemusíš se ptát ;)
A co kdybys ty raději někde pustil živou ukázku?

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