Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem ze sciezkami
Forum PHP.pl > Forum > Przedszkole
korro
witam, mam taka sytuacje, plik z funkcjami znajduje sie w /func/func.php, funkcje z tego pliku wczytuje plik ze sciezki /data/users.php, ale pliki wywolujace funcje znajduja sie w / i w /panel, fukcja wyglada tak
  1. <?php
  2. function checkUser($user) {
  3.  
  4. $users=@file('data/users.php');
  5.  
  6. for($i=1;$i<count($users);$i++) {
  7. if(chop($users[$i])==$user) return true;
  8. }
  9.  
  10. return false;
  11. }
  12.  
  13. ?>


w momencie wykonania jej z pliku w katalogu / dziala, ale jak bede chcial wykonac ja z pliku w katalogu /panel, sciezki nie beda poprawne, teraz pytanie, czy mozna wskazac w funckji sciazki z punktu widzenia funkcji, wtedy niezaleznie od pliku wywolujacego sciezka bylaby ok, jesli nie, to jak to rozwiazac questionmark.gif? pzdr
kszychu
Ustawić sobie zmienną $bezwzgledna_sciezka, przypisać do nie bezwzględną ścieżkę do skryptu (np:/var/www/htdocs/mojskrypt) następnie odwoływać się do wszystkich plików należących do skryptu za pomocą tej ścieżki. Np. odwołujesz się do pliku plik.inc w katalogu src, będącego w katalogu głónym skryptu:
  1. <?php
  2. include (&#092;"{$bezwzgledna_sciezka}/src/plik.inc\");
  3. ?>


Musisz pamiętać, by wewnątrz funkcji dołączać tę zmienną za pomocą global.
dabb
Zrob takie cos:

  1. <?php
  2. $sciezka=&#092;"/sciezka_do_pliku/data\";
  3. function checkUser($user) {
  4.  
  5. $users=@file('$sciezka/users.php');
  6.  
  7. for($i=1;$i<count($users);$i++) {
  8. if(chop($users[$i])==$user) return true;
  9. }
  10.  
  11. return false;
  12. }
  13.  
  14. ?>
nospor
1) Podawaj ścieżki bezwględne - rzadko stosowane
2) POdawaj do funkcji scieżkę skoro wiesz gdzie tą funkcję będziesz wywoływał
kszychu
Krótki komentarz:

@nospor:
1. Mało elsatyczne, wyobraz sobie przenoszenie skryptu do innej lokalizacji
2. A co, jeśli te samo funkcje bedzie wywolywal w roznych miejscach

@d4b: zapomniales o global.
Guest
witam, tak wlasnie myslalem, bede podawal jako parametr funkcji path do pliku, co do bezwzglednej sciezki to odpada, skrypt beda instalowac setki ludzi na wlasnych serwerach. dzieki za zainteresowanie. pzdr
dabb
Cytat
@d4b: zapomniales o global.


global?? ale mi takie cos dziala bez zarzutu
kszychu
Cytat(Guest @ 2005-04-07 12:50:52)
bede podawal jako parametr funkcji path do pliku

Zły pomysł... "zaciemnia" działanie funkcji. Jako parametry podajesz tylko dane, na których funkcja ma operować. Path jest dugozedny, dlatego lepiej global. Oczywiście Twój sposób tez będzie działał, ale wyobraz sobie wywolanie:
  1. <?php
  2. $tekst = parsuj_tekst($path, tekst);
  3. ?>

Prawda, że kicha? ;-)
Guest
to taka przenosnia byla :]
  1. <?php
  2. function checkUser($user,$local) {
  3.  
  4. if ($local) $users=@file('data/users.php');
  5. else $users=@file('../data/users.php');
  6.  
  7. for($i=1;$i<count($users);$i++) {
  8. if(chop($users[$i])==$user) return true;
  9. }
  10.  
  11. return false;
  12. }
  13. ?>
kszychu
Cytat(Guest @ 2005-04-07 12:57:12)
to taka przenosnia byla :]
  1. <?php
  2. function checkUser($user,$local) {
  3.  
  4. if ($local) $users=@file('data/users.php');
  5. else $users=@file('../data/users.php');
  6.  
  7. for($i=1;$i<count($users);$i++) {
  8. if(chop($users[$i])==$user) return true;
  9. }
  10.  
  11. return false;
  12. }
  13. ?>

Szczerze, to nie bardzo załapałem zasadę działania...
Ja bym to tak:
  1. <?php
  2. // gdzieś w konfigu...
  3. $path = '/var/www/htdocs/serwis';
  4.  
  5.  
  6. // w funkcji
  7. function checkUser($user) {
  8. global $path;
  9.  
  10. $users=@file($path.'/data/users.php');
  11.  
  12. for($i=1;$i<count($users);$i++) {
  13. if(chop($users[$i])==$user) return true;
  14. }
  15.  
  16. return false;
  17. }
  18. ?>
dabb
a dlaczego musi byc ten global ?

Jakbys mogl to zerknij do mojego topica - bo moze wlasnie tam to sie przyda smile.gif
Guest
bezwzglednej sciezki nie moge uzywac, tak jak napisalem skrypt jest rpzeznaczony dla totalnych laikow (czasem pytaja mnie, skad wziac total cmd.), zasada dzialania prosta, funkcje wywoluja albo pliki z / ($local = true), albo z /panel ($local = true). pzdr
kszychu
Cytat(d4b @ 2005-04-07 13:03:51)
a dlaczego musi byc ten global ?

Jakbys mogl to zerknij do mojego topica - bo moze wlasnie tam to sie przyda smile.gif

Poczytaj o zasięgu zmiennych.
FiDO
Jak wolisz bez globala to mozesz zastosowac stale:
  1. <?php
  2. // gdzieś w konfigu...
  3. define('PATH', '/var/www/htdocs/serwis');
  4.  
  5. // w funkcji
  6. function checkUser($user) {
  7.  
  8. $users=@file(PATH .'/data/users.php');
  9.  
  10. for($i=1;$i<count($users);$i++) {
  11. if(chop($users[$i])==$user) return true;
  12. }
  13.  
  14. return false;
  15. }
  16. ?>
mcbarlo
Mialem dokladnie ten sam problem. Z tym, ze w moim przypadku skrypt ze sciezka wzgledna byl wywolywany z przeroznych miejsc i takie rozwiazanie binarne jak twoje mnie nie satysfakcjonowalo. Postanowilem wiec napisac funkcje, ktora bedzie generowala odpowiednia ilosc "../" zeby cofnac sie do glownego katalogu skryptu i wtedy juz bylem w domu. Moze mistrzostwem to nie jest i zalatuje partyzantka to rozwiazalo moj problem.

Oto kod:
  1. <?php
  2.  
  3. function deep($def_deep = 4)
  4. {
  5.  for($i = count(explode(&#092;"/\", $_SERVER['SCRIPT_NAME'])) - $def_deep;$i > 0;$i--)
  6.  {
  7. $deep .= &#092;"../\";
  8.  }
  9.  
  10.  return $deep;
  11. }
  12.  
  13.  
  14. ?>
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.