Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] include / require - wielkość liter a konfiguracja PHP
-lukasamd-
post
Post #1





Goście







Witam wszystkich,
mam pewien problem z dosyć prostym kodem - jest funkcja, która dostaje jako argument string i załącza plik np. z tablicą do przyłączenia do już istniejącej, w mega-skrócie tak:


  1. function add_file($filename = '')
  2. {
  3. $file = DIR_MAIN . "/files/{$filename}.php";
  4.  
  5. if (file_exists($file))
  6. {
  7. require_once $file;
  8. }
  9. }


Problem pojawa się, gdy jako argument podam coś z wielkimi znakami - np. plik nazywa się testFile.php ale podanie jako argumentu testFile nie zadziała - wywala błąd o tym, że nie znaleziono testfile (tak, bez dużej litery).
Z czego to wynika? Zakładam, że chodzi o konfigurację PHP, bo problem występuje na 1-2 z 6-7 współdzielonych kontach hostingowych.
Go to the top of the page
+Quote Post
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




W unixach ważna jest wielkość liter plików, W Windowsach nie.


--------------------
Go to the top of the page
+Quote Post
Mackos
post
Post #3





Grupa: Zarejestrowani
Postów: 362
Pomógł: 44
Dołączył: 10.06.2009

Ostrzeżenie: (0%)
-----


W manualu funkcji readdir jest napisana bardzo elegancka funkcja, która moim zdaniem mogłaby się do tego nadać.
  1. if ($handle = opendir('.')) {
  2. while (false !== ($entry = readdir($handle))) {
  3. if ($entry != "." && $entry != "..") {
  4. echo "$entry\n";
  5. }
  6. }
  7. closedir($handle);
  8. }


--------------------
WebLemon.pl - projektowanie stron www, reklama i PR w internecie - Adwords, Facebook.
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




@Mackos chyba nie wiesz o czym mówisz...


--------------------
Go to the top of the page
+Quote Post
-lukasamd-
post
Post #5





Goście







@wookieb:
Wszystkie testowane przeze mnie konta działały na linuksach (czasem Debian, czasem CentOS, chyba był też jeden Ubuntu). Oczywiście wiem, że wielkość znaków ma znaczenie, ale dziwi mnie zachowanie PHP - zupełnie jakby "wymuszał" aby ten argument miał same małe litery, lub też w takiej formie używał go podczas sprawdzania i załączania pliku.
Po drodze nie ma nic, co modyfikowałoby ten argument, a jednak do file_exists oraz require trafia on jakby bo strtolower...
Go to the top of the page
+Quote Post
by_ikar
post
Post #6





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


No to spróbuj nie udziwniać składni, zamiast:

  1. $file = DIR_MAIN . "/files/{$filename}.php";


zrób to normalnie:

  1. $file = DIR_MAIN.'/files/'.$filename.'.php';


I wyświetl sobie tą ścieżkę i sprawdź czy jest różnica. Dodatkowo, do funkcji która raczej wymaga podania argumentu, nie nadawaj pustego argumentu, nie wiem jaki to ma cel?
Go to the top of the page
+Quote Post
-lukasamd-
post
Post #7





Goście







W pierwszym poście napisałem, że to mega-skrót a nie kod - chodzi o sam fakt zmniejszania liter, który bierze się znikąd.
A co do składni - nie ma znaczenia jak by nie było napisane, poza tym ta zaprezentowana wyżej również jest jak najbardziej poprawna.
Go to the top of the page
+Quote Post
by_ikar
post
Post #8





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Cytat(lukasamd @ 23.12.2011, 16:38:26 ) *
W pierwszym poście napisałem, że to mega-skrót a nie kod - chodzi o sam fakt zmniejszania liter, który bierze się znikąd.


W takim wypadku pokaż cały kod.

BTW używanie eregi też jest poprawne, a czy jest właściwe to jest inna kwestia. wink.gif

Ten post edytował by_ikar 23.12.2011, 17:41:38
Go to the top of the page
+Quote Post
-lukasamd-
post
Post #9





Goście







Cały kod:

  1. /**
  2. * Load the language variables for a section.
  3. *
  4. * @param string The section name.
  5. * @param boolean Is this a datahandler?
  6. * @param boolean supress the error if the file doesn't exist?
  7. */
  8. function load($section, $isdatahandler=false, $supress_error=false)
  9. {
  10. // Assign language variables.
  11. // Datahandlers are never in admin lang directory.
  12. if($isdatahandler === true)
  13. {
  14. $this->language = str_replace('/admin', '', $this->language);
  15. }
  16. $lfile = $this->path."/".$this->language."/".$section.".lang.php";
  17.  
  18. if(file_exists($lfile))
  19. {
  20. require_once $lfile;
  21. }
  22. elseif(file_exists($this->path."/english/".$section.".lang.php"))
  23. {
  24. require_once $this->path."/english/".$section.".lang.php";
  25. }
  26. else
  27. {
  28. if($supress_error != true)
  29. {
  30. die("$lfile does not exist");
  31. }
  32. }
  33.  
  34. // We must unite and protect our language variables!
  35. $lang_keys_ignore = array('language', 'path', 'settings');
  36.  
  37. if(is_array($l))
  38. {
  39. foreach($l as $key => $val)
  40. {
  41. if((empty($this->$key) || $this->$key != $val) && !in_array($key, $lang_keys_ignore))
  42. {
  43. $this->$key = $val;
  44. }
  45. }
  46. }
  47. }



A co jest niewłaściwego w używaniu {} do wyświetlania zmiennych?
Pytam szczerze, bo jeżeli coś jest nie tak, to wolałbym wiedzieć wink.gif
Go to the top of the page
+Quote Post
by_ikar
post
Post #10





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Nie ma nic złego w klamrach, ale używanie ich wszędzie, czy używanie wszędzie cudzysłowia to jest moim zdaniem, jest niepotrzebnym narzucaniem na wydajność. Żeby w cudzysłowiu php znalazło zmienną, musi całą jego zawartość przeparsować. W proceduralnym stylu, promowanym przez wiele cms'ów praktycznie każda linijka to jest echo z cudzysłowiem. Niby nic, ale kilkaset takich linijek i tworzy się niepotrzebny narzut. Klamry słóżą do innego celu niż ładnego wyglądania i również stosuje się je tam gdzie trzeba, przykładowo w sytuacjach jak w tym temacie: http://forum.php.pl/index.php?showtopic=190084 a nie za każdym razem. W cudzysłowiu dodatkowo chyba większość IDE nie "odnajduje" naszych smiennych. Czyli w takiej liście zmiennych, podczas refaktoryzacji zmieni się tylko część zmiennych, które "widzi" nasze IDE. kolorowanie składni również leży. Przypomina mi to właśnie proceduralny styl..

Po kodzie niczego nie widzę, ale całkowicie całego kotu też nie widzę. Wrzuć w tą funkcję wszędzie tam gdzie używasz zmiennej $section, tuż przed użyciem var_dumpa. Albo jeżeli używasz jakiegoś IDE porób sobie breakpointy i sprawdź co jest przekazywane do metody.

Ten post edytował by_ikar 24.12.2011, 14:03:42
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 19:04