Autor Zpráva
gardener
Profil
Zdravím..
Mám tento skript, který je uložen v adresáři s doc soubory a načítá jejich názvy do tabulky společně s ikonou,pokud

spustím skipt přímo v adresáři s .doc soubory jede vše o.k, pokud ho chci ovšem includovat do jiné stránky, která je v jiném

adresáři nikdy se nic neprovede(ani nemůže,jelikož skript se poté snaží načíst .doc soubory odjinud).

Zkoušel jsem to pomocí opendir a poté až spustit foreach, ale to bohužel nešlo..

Co dělám špatně?


Kód přikládám:
<?php
$ikona = "../../../../images/ikony/def_text copy.png";
$vystup = "<table width ='300' align='center' border=\"1\">\n";


$counter = 1;
foreach (glob("*.doc") as $filename)
{
if ($counter == 4)
{
$vystup .= "<tr>\n";
}
$vystup .= "<td><img src=\"{$ikona}\" width=\"128\" height=\"128\" />\n";
$vystup .= "<br />\n<a href=\"{$filename}\">$filename</a></td>\n";
if ($counter == 3)
{
$vystup .= "</tr>\n";
}
if ($counter == 3)
{
$counter = 1;
}
else
{
$counter++;
}
}
$vystup .= "</table>\n";

echo $vystup;
?>
Matty
Profil
gardener
Řekl bych, že špatná cesta k souboru. Zadej místo relativní cesty absolutní.
CoderMan99
Profil
no ak dáš tento súbor pomocou include na inú stránku sa nečuduj, že nepôjde, pretože tento príkaz si napísal len pre tento priečinok, musíš mať chybu v nastavení hľadania v priečinku, inak ja nevidím chybu v tomto kóde
gardener
Profil
Já vím,to je mi jasné, jelikož to includuji do souboru, který se nacháza v rootu, takže to hledá ty .doc tam (a tam nejsou) jak to ale vyřešit..
Absolutní cesta: <?php include('C:\xampp\htdocs\otevrena_naruc\web\koncept\admin\vypis.php'); ?>

Nepomohla..tedy pokud nemusí být obráceně lomítka..
kletely
Profil
gardener
Skús ich vymeniť za /.
gardener
Profil
Tak nic atˇ už s / či \ lomítkem to nejede..napíše to akorát ,že namám povolen přístup atd..
Warning: include(C:\xampp\htdocs\otevrena_naruc\web\naruc\admin\upload\files\te xty) [function.include]: failed to open stream: Permission denied in C:\xampp\htdocs\otevrena_naruc\web\naruc\include\content\texty.php on line 18

Warning: include() [function.include]: Failed opening 'C:\xampp\htdocs\otevrena_naruc\web\naruc\admin\upload\files\texty' for inclusion (include_path='.;C:\xampp\php\pear\') in C:\xampp\htdocs\otevrena_naruc\web\naruc\include\content\texty.php on line 18

Ještě mne napadá to vykoušet s cestou localhostu..
gardener
Profil
Ha:) s localhostem je to o krok dále:)
Warning: include() [function.include]: URL file-access is disabled in the server configuration in C:\xampp\htdocs\otevrena_naruc\web\naruc\include\content\texty.php on line 18

Warning: include(http://localhost/otevrena_naruc/web/naruc/admin/upload/files/t exty/vypis.php) [function.include]: failed to open stream: no suitable wrapper could be found in C:\xampp\htdocs\otevrena_naruc\web\naruc\include\content\texty.php on line 18

Warning: include() [function.include]: Failed opening 'http://localhost/otevrena_naruc/web/naruc/admin/upload/files/texty/vy pis.php' for inclusion (include_path='.;C:\xampp\php\pear\') in C:\xampp\htdocs\otevrena_naruc\web\naruc\include\content\texty.php on line 18

Nevíte,kde se to přesně nastavuje a zda je to vůbec na většině hostingů povoleno?
Majkl578
Profil
pouzivej relativni cesty (./)
gardener
Profil
To jsme zkoušel ale bohužel nefunguje :
<?php require('./admin/upload/files/texty/vypis.php'); ?> 
YoSarin
Profil
gardener
Mrkni sem: http://cz2.php.net/manual/en/language.constants.predefined.php
Konkrétně konstanta __FILE__.
Dále viz http://cz2.php.net/dirname
z toho nám leze:
$fileDir = dirname(__FILE__); // absolutní cesta ke skriptu (k fyz. souboru, ne k tomu co se vykonává)

A na to nalepíš relativní cestu k těm dokumentům... :)
gardener
Profil
Díky to vypadá nadějně:)
Jen si potřebuji ujasnit pár pojmů...k tomu "A na to nalepíš relativní cestu k těm dokumentům... ",to jsi myslel přesně jak prosím?
Trošku mám už zmatek v tom co kam includovat:)

To co jsi psal výše tedy vložím do skriptu,jenž mi zajištuje vypsání tabulky?
Tzn. takto:
<?php
$ikona = "../../../../images/ikony/def_text copy.png";
$vystup = "<table width ='300' align='center' border=\"1\">\n";

$fileDir = dirname(__FILE__);
$counter = 1;
foreach (glob("*.doc") as $filename)
{
    if ($counter == 4)
    {
        $vystup .= "<tr>\n";
    }
    $vystup .= "<td><img src=\"{$ikona}\" width=\"128\" height=\"128\" />\n";
    $vystup .= "<br />\n<a href=\"{$filename}\">$filename</a></td>\n";
    if ($counter == 3)
    {
        $vystup .= "</tr>\n";
    }
    if ($counter == 3)
    {
        $counter = 1;
    }
    else
    {
        $counter++;
    }
}
$vystup .= "</table>\n";

echo $vystup;
?> 


A ten pak nechám includovat do stránky na jine adresářové úrovni např texty.php?
Nebo je to jinak, jako že asi ano:)
gardener
Profil
Nikdo netuší???
gardener
Profil
Zkusím ten problém popsat ještě jednou:
Mám tyto složky (bráno od rootu webu):
1) ./admin/upload/files/texty/vypis.php -- Ve které se nachází .doc dokumenty a hlavně skript pro jejich vypsání do tabulky
2) ./layout.php -- Stránka do které se includují sekce v závislosti na proměnné
3) ./include/content/texty.php --Stránka kterou includuji do stránky "layout php" a ve které bych chtěl includovat to co je uvedeno na prvním místě čili "./admin/upload/files/texty/vypis.php"

Jenže ten výpis.php má tedy pak po includování tendenci načítat soubory z rootu webu a to je právě nežádoucí, potřebuji načítat ze složky ./admin/upload/files/texty/

Snad jsme to popsal trochu srozumitelně..
Vypadá to skoro jako neřešitelný problém:)
Říkám si,jestli by nebylo přístě lepší na to využít Mysql?
YoSarin
Profil
to dirname(__FILE__); ti vrátí adresář ve kterém je uložený tenhle skript. Přidej to před všechny relativní adresy v tomhle souboru. (tzn.: "../../../neco/nekde/soubor.pripona" -> dirname(__FILE__) . "../../../neco/nekde/soubor.pripona") Tak jak to máš teď ti to nebude zobrazovat tu png ikonku.

A abych se přiznal - jak funguje fce glob() naprosto netuším... :-<
gardener
Profil
Takže v podstatě zadám odkud kam?
Nebo mi to prostě jakoby "virtuálně" přenese adresář na pozici z které mohu již načítat?
Tzn:
("../../../neco/nekde/vypis.php" -> dirname(__FILE__) . "../../../neco/nekde/texty.php")

Nebo nee?
YoSarin
Profil
znovu říkám - nevím odkud fce glob() načítá adresáře. Jestli to chápu dobře, tak projde celej dostupnej filesystem a zobrazí soubory odpovídající zadání ( - je otázka nakolik je tohle žádoucí, třeba tam jednou budeš chtít mít *.doc kterej by neměl bejt takhle přístupnej...). Pokud to projde celej souborovej systém, tak by problém být neměl (ani bez dirname(__FILE__);), pokud projde jen dceřinné adresáře z místa kde spouštíš skript, mohlo by to být horší...
Zkus použít:
$dir = opendir(dirname(__FILE__) . "/relativni/cesta/k/docum/"); // v tvém případě ta cesta imho bude jen /./, nebo to tam nemusíš psát vůbec... ;)
while (false !== ($name = readdir($dir))) {
  // tady si vypiš ty soubory (a odfiltruj co není *.doc)
}

Takhle by to snad fungovat mělo...
gardener
Profil
Bohužel..Zase nic..
¨jako relaticní cestu jsem zadal /./

celý kód vypadá pro kontrolu takto:(navíc jsme zjistil,že jsem měl před tím chybu v počítání sloupců tabulky..


<?php
$ikona = "../../../../images/ikony/def_text copy.png";
$vystup = "<table width ='300' align='center' border=\"1\">\n";
$filedir = opendir(dirname(__FILE__) . "/./"); 
while (false !== ($name = readdir($filedir)))
$counter = 1;
foreach (glob("*.doc") as $filename)
 {
 	  if ($counter == 4)
    {
        $vystup .= "<tr>\n";
    }
    $vystup .= "<td><img src=\"{$ikona}\" width=\"128\" height=\"128\" />\n";
    $vystup .= "<br />\n<a href=\"{$filename}\">$filename</a></td>\n";
    if ($counter == 3)
    {
        $vystup .= "</tr>\n";
    }
    if ($counter == 3)
    {
        $counter = 1;
    }
    else
    {
        $counter++;
    }
}
$vystup .= "</table>\n";

echo $vystup;


?> 
gardener
Profil
kyž změním relativní cestu na "./admin/upload/files/texty/",tak to pro změnu vypíše že zadaný argument neodpovídá validnímu adresáři..
YoSarin
Profil
Ach jo... :)
Co myslíš že dělá
while (false !== ($name = readdir($filedir)))
$counter = 1;

Ano, správně - podle toho, kolik je v adresáři souborů tolikrát ti to nastaví $counter na 1... :) Vyhoď ten foreach (glob("*.doc") as $filename) a místo něj tam dej ten while cyklus... Nastavuješ cestu nějakýmu $dir pomocí opendir a pak místo toho používáš glob, který bere ty soubory bůh ví kde...

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: