Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: opendir() + udział sieciowy Windows
Forum PHP.pl > Forum > PHP
EraserHead
Cześć.
Może ktoś z was uporał się z następującym problemem:

Chcę wyświetlić zawartość udostępnionego folderu Windows, np:

Kod
<?php
$dir = "\\host\share";

if (is_dir($dir)) {
   if ($dh = opendir($dir)) {
       while (($file = readdir($dh)) !== false) {
           echo "filename: $file : filetype: " . filetype($dir . $file) . "<br>";
       }
       closedir($dh);
   }
}
?>


Podany przykład działa pięknie z lokalnymi katalogami serwera, ale ze zdalnymi udziałami nie zamierza.
Dodam jeszcze, że:
1. sprawdziłem uprawnienia udziału, oraz uprawnienia NTFS: grupa Wszyscy ma pełne prawa
2. $dir = "\\host\share" - próbowałem wszystkich kombinacji slaszologii: //host/share, \\\\host\\share, ////host/share itp. i nic.

Jakieś pomysły? Z góry dzięki.
crash
Powinno działać, chociaż za wiele o tym w manualu nie wspominają. Spróbowałem katalogu: file://host/zasób/ to dostałem dokładniejsze info: remote host file access not supported... Jedyną rade jaką mogę dać to mapuj ten zasób jako dysk sieciowy...
Kshyhoo
Ja znalazłem 4 przykłady, pewnie nie chciało się szukać?
  1. ?<?php
  2. if($d = opendir('./'))
  3. {
  4. while($f = readdir($d))
  5. {
  6. if(substr($f, -4) == 'html')
  7. {
  8. echo '<a href=\"./'.$f.'\">'.$f.'</a><br/>';
  9. }
  10. }
  11. closedir($d);
  12. }
  13. ?>
  1. <?php
  2. if($d = opendir('./'))
  3. {
  4. while($f = readdir($d))
  5. {
  6. if(substr($f, -4) == 'html')
  7. {
  8. $str = array(&#092;".htm\", \".html\");
  9. $g = str_replace($str, &#092;"\", $f);
  10. echo '<a href=\"./'.$f.'\">'.$g.'</a><br/>';
  11. }
  12. }
  13. closedir($d);
  14. }
  15. ?>
  1. <?php
  2.  
  3. class ExtensionFilter extends FilterIterator
  4. {
  5. protected $strExtension = '';
  6.  
  7. public function __construct( Iterator $objIterator, $strExtension )
  8. {
  9. parent::__construct( $objIterator );
  10. $this->strExtension = $strExtension;
  11. }
  12.  
  13. public function accept()
  14. {
  15. return ( strtolower( end( explode( '.', $this->current() ) ) ) === $this->strExtension );
  16. }
  17. }
  18.  
  19. ?>
  1. <?php
  2.  
  3. foreach( new ExtensionFilter( new DirectoryIterator( './' ), 'html' ) as $objFile )
  4. {
  5. echo '<a href=\"' . $objFile->GetPathname() . '\">' . $objFile . '</a><br>';
  6. }
  7.  
  8. ?>

czyli czytanie zawartości katalogu...
EraserHead
[crashu]: niestety mapowanie też nic nie daje.

[Kshyhoo]: cóż - co do ostatniego posta to powiem że chciało mi się szukać i takich przykładów znalazłem sporo, tylko jak wspomniałem nie działają z udziałami sieciowymi.
crash
No niestety na zmapowanym dysku też nie chce działać (dopiero teraz sprawdziłem)... Zostaje chyba tylko czekać aż ekipa php napisze wrapper do obsługi tego... Możesz jeszcze spróbować z http://freshmeat.net/projects/smbwebclient/, ale to już wymaga bardziej Unix'a...
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.