Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt działa samodzielnie, includowany na stronie już nie
Forum PHP.pl > Forum > PHP
brzydalson
Witam. Pracuję nad nową stroną i chcę napisać skrypt tworzący galerie zdjęć oraz na podstawie plików znajdujących się na ftp tworzy linki do poszczególnych galerii. Wszystko szło świetnie. Udało mi się zrobić podobny skrypt ale do aktualności. Problem zaczął się wtedy gdy ten od galerii zaincludowałem na stronie. Oto kod skryptu:
  1. <?php
  2. $licznik = 0;
  3. $zawartosc = array();
  4. foreach (glob("galerie/*") as $filename) { // W tym miejscu wywala błąd
  5. if(is_dir($filename)){
  6. $zawartosc[$filename] = date('Y-m-d H:i:s',filemtime($filename));
  7. }
  8. }
  9. arsort($zawartosc);
  10. while (list ($klucz) = each ($zawartosc)) {
  11. $file2 = basename ($klucz);
  12. foreach (glob("galerie/".$file2."/*") as $name) ;
  13. if ($licznik<11){
  14. print("<img src='images/li.gif' border='0'><a href=\"galerie.php?id=".$licznik."\">".basename($name,".txt")."</a><br />\n");
  15. $licznik++;
  16. }
  17. }
  18. ?>


Wywala mi błąd treści :Warning: Invalid argument supplied for foreach()

Nie wiem dlaczego kiedy uruchamiam ten skrypt osobno to wszystko działa jak należy a na stronie już nie działa. Dziękuję za każdą pomoc. Pozdrawiam
Blame
Widocznie skrypt nie może znaleźć folderu galerie, podaj ścieżkę bezwzględną do niego.
brzydalson
Podawałem już na wszelkie możliwe sposoby i nic. Tylko dlaczego skrypt miałby widzieć ścieżkę do folderu jak go odpalam bez strony a na stronie już nie? A skrypt i strona znajdują się w tym samym folderze więc ścieżki się nie zmieniają.
marcint83
A wywołaj:
  1. is_dir('galerie');

i zobacz co zwróci.
CuteOne
Szkoda, że nie podałeś nam ścieżki do katalogu ze skryptem i galerią, może to zadziała:

  1. <?php
  2. if ($foldername = opendir("myfolder")) {
  3. while (false !== ($filename = readdir($foldername))) {
  4. if ($filename != "." && $filename != "..") {
  5. $files[] = $filename;
  6. }
  7. }
  8. closedir($foldername);
  9. }
  10. ?>
brzydalson
Dziękuję serdecznie za dotychczasową pomoc. Teraz tak isdir nie wywala błędu i zwraca TRUE skrypt podany przez CuteOne również działa. Problem znów się pojawia gdy includuję skrypt na stronie.
Warning: opendir(/galerie): failed to open dir: Invalid argument in
Ten błąd wywala odnośnie linii :
Kod
if ($foldername = opendir("/galerie")) {

Co do ścieżki to tak, korzystam z krasnala i w folderze z plikami strony gdzie również jest index.php oraz folder "galerie" znajduje się skrypt. Błąd pojawia się również kiedy mam taki kod
Kod
if ($foldername = opendir("galerie")) {
CuteOne
A próbowałeś z bezwzględnąquestionmark.gif nie pamiętam już dokładnie jaka prowadzi do krasia ale chyba "c:/user/krasnal/httpdocs/folder_twojej_strony/galeria/" zamiast "/galeria"
Noidea
1. Jeżeli na początku ścieżki znajduje się / to oznacza on katalog główny (root). Pod Windowsem będzie to pewnie C:\
Ścieżki względne budujemy tak:
"galeria"
albo tak:
"./galeria"

2. Wstaw sobie przed tym ifem
  1. echo dirname( $_SERVER["SCRIPT_FILENAME"] );

żeby zobaczyć gdzie znajduje się twój nadrzędny plik, który includuje pozostałe i od tego katalogu buduj ścieżki względne.

3. Jeśli z jakiegoś względu twój skrypt musi działać zarówno samodzielnie jak i podczas includowania, to zrób operuj ścieżkami bezwzględnymi jak CuteOne mówi
brzydalson
Dobra poprawiłem trochę skrypt i teraz owszem wchodzi do folderu(tylko nie wiedzieć czemu wcześniej nie działał ;/) ale problem jest taki że teraz jak go samodzielnie odpalam to wykonuje swoje zadanie czyli wypisuje linki na stronie ale kiedy zaincluduję go na stronie to nic nie robi. Pomocy
Oto kod:
Kod
<?php
$licznik = 0;
$zawartosc = array();
if ($foldername = opendir("c:\usr\krasnal\www\bartek\galerie")) {
  while (false !== ($filename = readdir($foldername))) {
    if ($filename != "." && $filename != "..") {
      if((is_dir("galerie/".$filename))){
      $zawartosc[$filename] = date('Y-m-d H:i:s',filemtime("galerie/".$filename));
      }
    }
  }
  closedir($foldername);
}
arsort($zawartosc);
while (list ($klucz) = each ($zawartosc)) {
$file2 = basename ($klucz);
foreach (glob("galerie/".$file2."/*") as $name);
if ($licznik<11){
print("<img src='images/li.gif' border='0'><a href=\"galerie.php?id=".$licznik."\">".basename($name,".txt")."</a><br />\n");
$licznik++;
}
}
print_r($zawartosc);
?>



OK. Wpadłem na kolejny trop, otóż to chyba wina strony internetowej. Skrypt nie chce działać tylko w dwóch specjalnie do tego stworzonych ramkach. Nie są to ramki w html tylko taki układ strony jest w css że po prawej stronie są dwa okienka jedno do news a drugie do galerii. Skrypt umieszczony po środku odpala się bez problemu i wykonuje swoje zadanie. Szukam dalej.

Poddaję się. Wysyłam kod strony i proszę o pomoc. Ja nie widzę nigdzie błędu. Skrypt nie chce działać w divie "right". Wszędzie indziej się odpala i działa jak należy. Ktoś ma jakiś pomysł?
Kod
<body>
<p align="center">
<table align="center">
<tr><td>

<div id="content">
            <div id="header">
                        </div>

            <div id="tabs">
<ul>    

<li><a href="index.php" >Start</a></li>
<li><a href="animatorzy.php" >Animatorzy</a>
<li><a href="zespół.php" >Zespół</a></li>
<li><a href="grafik.php" >Grafik</a></li>
<li><a href="rekreacja.php" >Rekreacja</a></li>
<li><a href="kierownik.php" >Kierownik</a></li>
<li><a href="kalendarium.php" >Kalendarium</a></li>
<li><a href="orat.php" ></a></li>
            </ul>
            <p>
<p> <br><br>
<a class="menutop" href=".html">vdsd</a>  ?
<a class="menutop" href=".html">sdvsd</a>  ?
<a class="menutop" href=".html">sdvsdv</a>  ?
<a class="menutop" href=".html"></a>  ?
<a class="menutop" href=".html"></a>  ?


</div>

<div class="left">
<div class="left_articles">

<br>
<?php include'skrypt.php';?>
<br>

</div>
            
<div class="thirds">
<div class="smallboxtop"></div>
<div class="smallbox">
<p class="hedline">Animatorzy:</p>
<p> <br>


            <a href="">xxxxxxxxxxxxxxx</a><br>
        
            <a href="">xxxxxxxxxxxxxxx</a><br>
        
            <a href="">xxxxxxxxxxxxxxx</a><br>
        
            <a href="">xxxxxxxxxxxxxxxx</a><br>
        
</p>
<div class="buttons"><p><a href=".html">
    <img src="images/sign.gif" border="0">
      <img src="images/sign.gif" border="0">
      <img src="images/sign.gif" border="0">
      <img src="images/sign.gif" border="0">
</a></p></div>
<!-- <div class="buttons"><p><a href=".html" class="bluebtn">Dalej...</a></p></div> -->
    
                </div>
            </div>
        
            <div class="thirds">
                <div class="smallboxtop"></div>
                <div class="smallbox">
                <p class="hedline">Zespół</p>
<p> <br>

    
            <a href="">xxxxxxxxxxxxxxx </a><br>
        
            <a href="">xxxxxxxxxxxxxxx</a><br>
        
            <a href="">xxxxxxxxxxxxxxx</a><br>
        
            <a href="">xxxxxxxxxxxxxxx</a><br>
                            
</p>
<div class="buttons"><p><a href=".html">
    <img src="images/sign.gif" border="0">
      <img src="images/sign.gif" border="0">
      <img src="images/sign.gif" border="0">
      <img src="images/sign.gif" border="0">
</a></p></div>
                </div>
            </div>
        
            <div class="thirds">
                <div class="smallboxtop"></div>
                <div class="smallbox">
                <p class="hedline">Inne</p>
<p> <br>
<a href=".html">XXXXXXXXX</a><br>
<a href=".html">XXXXXXXXX</a><br>
<div class="buttons"><p><a href=".html">
    <img src="images/sign.gif" border="0">
      <img src="images/sign.gif" border="0">
      <img src="images/sign.gif" border="0">
      <img src="images/sign.gif" border="0">
</a></p></div>
                </div>
            </div>
    </div>
    
            <div id="right">
            <br>
                  <div class="boxtop"></div>
            <div class="box">
            
                <p class="hedline">AKTUALNOŚCI</p>
<p> <br>
            <?php
include 'news/news.php';
?>
    </p>
<div class="buttons"><p><a href=".html">
    <img src="images/sign.gif" border="0">
      <img src="images/sign.gif" border="0">
      <img src="images/sign.gif" border="0">
      <img src="images/sign.gif" border="0">
</a>

</div>
            </div>
                            <div class="boxtop"></div>
            <div class="box">
            <p class="hedline">NAJNOWSZE GALERIE</p>
<p> <br>
            <?php
include 'skrypt.php';
?>
    </p>
<div class="buttons"><p><a href=".html">
    <img src="images/sign.gif" border="0">
      <img src="images/sign.gif" border="0">
      <img src="images/sign.gif" border="0">
      <img src="images/sign.gif" border="0">
</a>

</div>
            </div>
        </div>     
</div>
</tbody>
</table>
</body>
CuteOne
a sprawdzałeś co wypluwa $zawartosc[$filename] questionmark.gif Spróbuj tak i zobacz co się pokaże

  1. $licznik = 0;
  2. $zawartosc = array();
  3. if ($foldername = opendir("c:\usr\krasnal\www\bartek\galerie")) {
  4. while (false !== ($filename = readdir($foldername))) {
  5. if ($filename != "." && $filename != "..") {
  6. if((is_dir("galerie/".$filename))){
  7. $zawartosc[$filename] = date('Y-m-d H:i:s',filemtime("galerie/".$filename));
  8. }
  9. }
  10. }
  11. print_r($zawartosc);
  12. closedir($foldername);
  13. }

jeżeli nic nie wypluje zmień na:
  1. $licznik = 0;
  2. $zawartosc = array();
  3. $root_to_galery = "c:\usr\krasnal\www\bartek\galerie";
  4. if ($foldername = opendir($root_to_galery)) {
  5. while (false !== ($filename = readdir($foldername))) {
  6. if ($filename != "." && $filename != "..") {
  7. if((file_exists($root_to_galery."/".$filename))){ // tutaj kombinuj (np. bez $root_to_galery)
  8. $zawartosc[$filename] = date('Y-m-d H:i:s',filemtime("galerie/".$filename)); // tu również zamiast galerie/ możesz podstawić $root_to_galery i sprawdzić
  9. }
  10. }
  11. }
  12. print_r($zawartosc);
  13. closedir($foldername);
  14. }
everth
Możesz spróbować też sprawdzić jak wygląda ścieżka w odrębnym pliku a jak normalnie. Daj zaraz po tagach otwierających w includowanym skrypcie takie coś
  1. var_dump(realpath('galerie/'));

Uruchom jako osobny skrypt i jako include i zobacz czy ścieżki się zgadzają.
brzydalson
Właśnie o to chodzi że to chyba nie wina skryptu ani ścieżki do folderu. Sprawdzałem co wypluwa i podaje normalne wyniki z tablicy takie jak powinny być ale tylko jeśli skrypt jest umieszczony w <div class=left> gdy umieszczę go po prawej stronie to już nie działa. Problem leży po stronie strony internetowej, tak myślę. Tam nic nie widzicie?
everth
HTML w żaden sposób nie może wpłynąć na kod skryptu - chyba że jest źle osadzany. Jak łączysz PHP z htmlem - rzuć niepodzielony plik. Tylko może skorzystaj z jakiejś strony typu wklej.org bo inaczej nie będzie się dało tego tu czytać.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.