[ urke @ 17.05.2003. 00:46 ] @
Trebam da napravim tabelu sa fajlovima za preuzimanje na sajtu, ali ono što radi u lokalu ne radi OnLine.

Znači, ne mogu na udaljenom serveru da odradim iz PHP skripte listanje direktorijuma sa readdir($dir) ... Gledao sam po PHP priručniku ali mi nije jasno ono fopen(), kako čitati t.j. listati direktorijum iz PHP strane/skripte na serveru/sajtu?

Hvala svima unapred.
[ -zombie- @ 17.05.2003. 01:13 ] @
sa readdir() nikako.

možda sa ftp funkcijama ako imaš pristup... http://php.net/ftp
[ Goran Rakić @ 17.05.2003. 12:00 ] @
možeš koristiti konekciju na port 80 i izlistati datoteke i direktorijume poput nekog web crawler-a. Curl je ključna reč.
[ -zombie- @ 17.05.2003. 15:52 ] @
gorane, ili nemoj da lupaš, ili kaži meni da lupam.. ;)

preko http protokola (iliti porta 80) nije moguće izlistati datoteke i direktorijume.


ako ti predlažeš učitavanje html stranice i parsiranje i izvlačenje linkova, pa na osnovu toga *pretpostavljanje* imena direktorijuma i fajlova, to uopšte ne mora da znači.. web server uopšte ne mora da mapira url na fajl sistem, nego može raditi url-rewrite, ili bilo koji drugi fazon..

pa tvoj rođeni engine na prevod.org je prvi primer.. hoćeš da me ubediš da je na http://prevod.org/osobe/goran /goran direktorijum ili fajl.. sigurno znam da nije ;)
[ tOwk @ 17.05.2003. 19:09 ] @
Nije to „njegov rođeni engine“, već delo mojijeh ruku :-P

Nego, pomoću HTTP-a je zaista nemoguće izlistati direktorijume, pošto pojam direktorijuma ne postoji: postoji samo pojam „resursa“ koji se identifikuje pomoću URL-a („Jednoobrazni ukazivač na resurs“, upravo smišljen prevod za Zombija, ljubitelja istih :-)). Postojanje „/“ na kraju URL-a ništa ne znači, već je to znak kao i svaki drugi (to što su većinom serveri na Unix sistemima — na njima se ovaj znak koristi za razdvajanje direktorijuma — je druga priča).

Sad, ako pretpostavimo da je Urke imao probleme drugačije prirode: pokušava da iščita sadržaj direktorijuma na udaljenom serveru, ali pomoću PHP programa koji radi na istom tom serveru, tj. „u lokalu“.

E tada može biti raznih problema pri upotrebi readdir() funkcije. Najverovatniji problem je upotreba odgovarajućih dozvola. Zato, proveri da li imaš „x“ (execute) ovlašćenja za sve poddirektorijume željenog direktorijuma, i „r“ (read) ovlašćenja za taj direktorijum (ukoliko se ne koristi CGI PHP + SuExec, onda najverovatnije korisnik pod kojim server radi [httpd, nobody] treba da ima ta ovlašćenja).

U svakom slučaju, preporučujem da pošalješ „nevaljali“ kod, pa da neko sa malo više iskustva od tebe to prokomentariše.
[ Goran Rakić @ 17.05.2003. 19:20 ] @
Rekao je da mu treba za download skriptu. Predpostavio sam da je našao strava sajt sa linkovima i da želi da to predstavi kao svoju download sekciju i da onda preusmeri korisnika. U tom slučaju (kako korisnik mora da dođe do fajla) sigurno je da postoji link oblika http://nesto.tld/dir1/mapiranj...ne/apache/servera/datoteka.zip. Dakle, sigurno je da do datoteka.zip u 80% slučaja može da dođe. A verujem da je to što mu i treba. U onih 20%, ona putanja je privremenog tipa te do datoteke nije moguće doći. Tako nešto sigurno može uraditi izradom (ne tako složenog) parsera koji koristi curl ili slične php klase (snoopy ili tako nešto) i snima linkove ili čak i prevlači datoteke u lokal. (ukoliko na serveru postoji wget, wget +xrk systemski poziv može da te reši puno muka, naročito sa onim lepim apache stilom "listanja" direktorijuma, gde je to omogućeno)

Tačno je da sam direktorijum nikako (poput sa readdir) ne može da izlista preko HTTP protokola. Za to može poslužiti već predloženi način pristupa preko FTPa, mada lično ne verujem da imaš privilegije da se na taj remote sajt prijavljuješ kroz FTP.

Danilovo razumevanje pitanja je pak dosta logično te molim autora teme da pojasni da li je na to mislio.
[ urke @ 19.05.2003. 15:04 ] @
Evo ovako sam ja to uradio, preko nlist funkcije:

Code:
<?php
// definisanje promenljivih za pristup FTP serveru
$ftp_server = "kolubara.mas.bg.ac.yu";
$ftp_user_name = "username";
$ftp_user_pass = "pass";

// povezivanje na FTP serever
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// proveravamo da li samo se uspešno povezali na server
if ((!$conn_id) || (!$login_result)) {
  // ako nismo, kukamo posetiocu o tome... 
  echo "<FONT SIZE=\"2\" COLOR=\"red\">Eh, nemamo sreće ovaj put. Povezivanje na FTP server nije uspelo <BIG>☹</BIG><BR>";
  echo "Pokušali smo da se nakačimo na server „".$ftp_server."‟ sa korisničkim imenom „".$ftp_user_name."‟, al' nam nije uspelo</FONT>";
} else {
  // ako jesmo odrađuejmo posao koji treba odraditi...
  <BR><BR><B>Trenutni sadržaj direktorijuma:</B><BR>";

  // listanje direktorijuma
  $ftp_dir = ftp_nlist($conn_id, "/web/user/urke");

  // ispisivanje sadržaja direktorijuma za određene fajlove
  for($i==0;$i<count($ftp_dir);$i++) {
    if (preg_match ("/\.(tar|gz|bz2|zip|tgz)$/i",$ftp_dir[$i])) {
      $file_mod = ftp_mdtm($conn_id, "$ftp_dir[$i]");
      $file_size = ftp_size($conn_id, "$ftp_dir[$i]");
      $fajl_name = ereg_replace("/web/user/urke/","", $ftp_dir[$i]);
      print "fajl <A HREF=\"$fajl_name\">$fajl_name</A> veličine $file_size bajtova, postavljen na mrežu ".date("d-m-Y", $file_mod)." u ".date("H:i:s", $file_mod)."<br>";
    }
  }
}

// zatvaranje konekcije sa serverom
ftp_close($conn_id);
?>