Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: niewłaściwe działanie funkcji strpos
Forum PHP.pl > Forum > PHP
andrusek00
Witam.
Mam problem z prawidłowym działaniem aplikacji, której zadaniem jest wypisanie wszystkich plików (szablon, plik .txt) w folderze (pętla while), a podczas każdego obiegu pętli, sczytywana jest nazwa (odpowiednio sformatowana), następnie otwierany jest inny plik txt (lista linków) i na podstawie nazwy znajdowana odpowiednia linijka oraz wklejana na miejsce starego w szablonie.
O ile większość jest jest już zrobiona, o tyle ugrzązłem od kilku dni nad prawidłowym działaniem funkcji strpos, która tylko za pierwszym wywołaniem działa tak jak powinna.
Jestem początkującym w temacie, jednak poproszę o skupienie się nad rozwiązaniem problemu - pewnie coś niewielkiego, ale Ja już nie mam siły tongue.gif
Z góry dzięki za pomoc.

  1. $alinks = array('D:\\testing\\linki1.txt',
  2. 'D:\\testing\\linki2.txt',
  3. 'D:\\testing\\linki3.txt');
  4.  
  5. if($dh = opendir(tbf)){ // otwiera folder tbf
  6. while(($file = readdir($dh)) !== false){ // wypisuje nazwy plikow
  7. if(($file !== '.') && ($file !== '..')){ //pomija . i ..
  8. // zczytanie nazwy pierwszego pliku w folderze
  9. $exp = explode('.',$file); //dzieli nazwe pliku
  10. //print_r ($exp);
  11. //echo '</br>';
  12. if($dindex = array_search('2014',$exp)); // sprawdza czy w nazwie znajduje sie data 2014...
  13. elseif($dindex = array_search('2013',$exp));
  14. elseif($dindex = array_search('2012',$exp));
  15. elseif($dindex = array_search('2011',$exp));
  16. elseif($dindex = array_search('2010',$exp));
  17. elseif($dindex = array_search('2009',$exp));
  18. elseif($dindex = array_search('2008',$exp));
  19. elseif($dindex = array_search('2007',$exp));
  20. elseif($dindex = array_search('2006',$exp));
  21. elseif($dindex = array_search('2005',$exp));
  22. elseif($dindex = array_search('2004',$exp));
  23. elseif($dindex = array_search('2003',$exp));
  24. elseif($dindex = array_search('2002',$exp));
  25. elseif($dindex = array_search('2001',$exp));
  26. elseif($dindex = array_search('2000',$exp));
  27. elseif($dindex = array_search('1999',$exp));
  28. //... jesli znajdzie ktoras z dat,
  29. //to zapisuje jej klucz w tablicy dindex
  30. echo $dindex.' : dindex</br>';
  31. for($i = 0; $i <= $dindex; $i++){ //zczytuje nazwe oraz rok do tablicy ititle
  32. $ititle[$i] = $exp[$i];
  33. echo $ititle[$i].' : ititle</br>';
  34. }
  35.  
  36. $filename = implode('.',$ititle); //filename przechowuje tytul i rok
  37. unset($ititle);
  38. echo $filename.' : filename</br>';
  39.  
  40.  
  41. for($x = 0; $x <= count($alinks)-1; $x++){ // petla ogolna dla kazdego pliku z linkami
  42. if(is_file($alinks[$x])){ // sprawdza czy taki plik z linkami sie znajduje
  43. if($ffh = fopen($alinks[$x],'r')){ // otwiera plik z linkami
  44. while ($haystack = fgets($ffh)){ // zaczyna pobierac linie textu
  45. //echo 'Pobiera linie textu : '.$haystack.'</br>';
  46. if(strpos($haystack,$filename) !== FALSE){ // jesli napotka tytul,
  47. $newlink [$x] = $haystack; // to zapisuje go w tablicy
  48. echo $newlink[$x].' : NEWLINK!</br>';
  49. }
  50. }fclose($ffh);
  51.  
  52. }else{
  53. echo 'Nie udalo sie otworzyc pliku: '.$alinks[$x].'</br>';
  54. }
  55.  
  56. }else{
  57. echo '</br>Nie ma takiego pliku: '.$alinks[$x].'</br>';
  58. }
  59. }
  60. // wkleja nowy link do szablonu
  61. /*if($fgc = file_get_contents('D:\\testing\\tbf\\'.$file)){
  62. $fgc = str_replace('<!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->{links_1}<!--c2--></div><!--ec2-->','<!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->'.$newlink[0].'<!--c2--></div><!--ec2-->', $fgc);
  63. file_put_contents('D:\\testing\\tbf\\'.$file,$fgc);
  64. $fgc = str_replace('<!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->{links_2}<!--c2--></div><!--ec2-->','<!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->'.$newlink[1].'<!--c2--></div><!--ec2-->', $fgc);
  65. file_put_contents('D:\\testing\\tbf\\'.$file,$fgc);
  66. $fgc = str_replace('<!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->{links_3}<!--c2--></div><!--ec2-->','<!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->'.$newlink[2].'<!--c2--></div><!--ec2-->', $fgc);
  67. file_put_contents('D:\\testing\\tbf\\'.$file,$fgc);
  68. }
  69. */
  70. } // KONIEC IF'a
  71. }
  72. closedir($dh);
  73. }
Pyton_000
OMFG.... Jak zobaczyłem te IFy to myślałem że z krzesła spadę.

Ad. tematu...
Przed:
  1. if(strpos($haystack,$filename) !== FALSE){ // jesli napotka tytul,

daj
  1. var_dump($haystack,$filename);


I sprawdzaj wywołania
andrusek00
Wówczas wypluwa zawartość $haystack, czyli aktualnie sczytywana linię z pliku z listą oraz $filename, czyli aktualnie poszukiwany klucz, jednak strpos nie łączy jednego z drugim. A co ciekawe, gdy usunąłem pierwszy plik z listy teraz również nie znajduje kolejnego w kolejce. Gdzieś musi tkwić problem w obrębie tego for'a, ale po tych kilku dniach już nie potrafię go sam namierzyć :/
Pyton_000
daj zamiast $haystack trim($haystack) w stripos
aniolekx
poczytaj co to xdebug i jak go używać np z NetBeans, oszczędzi ci mnóstwo czasu.
andrusek00
Bueeee, bueee, bueeeeee ;-(
... kilka dni spędzonych nad jednym problemem, kilkanaście kaw wypitych i nocy zarwanych. Oczy podkrążone i myśli depresyjne, a rozwiązaniem okazało się być wstawienie jednej litery - 'i', aby różnica między małymi i dużymi literami została zignorowana.
Pozdro dla pomagających i czytających.

PS. xdebug rulez ;-)
mar1aczi
Za to jakie doświadczenie Ci pozostanie wink.gif
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.