Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Otwarcie pliku
Forum PHP.pl > Forum > Przedszkole
Lee
Mam pytanie a raczej problem otóż wziąłem się za operacje na plikach i jak otwieram takim kodem plik dane.txt to wszystko ok pokazuje co zechce, ale jak chcę otworzyć plik dane.php to nie chce nic pokazać :| (używam ten sam kod do otwarcia i wyświetlania, chmody są takie same: 666)

Kod otwierający i wyświetlający dane
  1. <?php
  2.  
  3. $plik = fopen("dane.txt", "r+");
  4. $dane = file('dane.txt'); // przy otwarciu dane.php używam $dane = fread($plik, filesize('$dane.php));
  5. echo $dane[2]; // przy otwarciu dane.php używam echo $dane
  6. fclose($plik);
  7.  
  8. ?>


Zawartosc dane.txt
Cytat
Tekst pierszy
Tekst drugi
Tekst trzeci


Zawartosc dane.php
  1. <?
  2. $tekst = "tekst pierwszy";
  3. echo $tekst;
  4. ?>


help ?!
Cysiaczek
zrób tak jak możesz:
  1. <?php
  2. $dane=file_get_contents($filename); //prosciej
  3. ?>
Lee
No dobra ale funkcja file_get_contents zwraca zawartość np dane.txt w postaci Tekst PierwszyTekst DrugiTekstTrzeci a file() zwróci mi $dane[0] = "Tekst Pierwszy" $dane[1] = Tekst Drugi itd.. czyli każdą linijke tekstu w osobnym elemencie tablicy, tylko zauważyłem, że pewnych znaków lub czegoś nie bieże pod uwage wiem, że znacznika <?php lub <? i "enterów" ale funkcje np ob_start(); chyba też pomija... nie jestem pewien - ale to już pewnie wiecie rolleyes.gif napisałem się a i tak nikt nic nie zrozumie i dalej odpowiedzi nie uzyskam =(
Cysiaczek
  1. <?php
  2. $plik='dane.php';
  3. $pointer = fopen($plik, "r+");
  4. $dane = fread($pointer, filesize($plik));
  5. fclose($pointer);
  6. echo $dane[2]; // tu nie ma tablicy wiec nie zrobisz tak jak prz file()
  7.  
  8. ?>
Lee
Poradziłem sobie tak
  1. <?php
  2. $Plik = fopen("dane.php", "r+");
  3. $zawartosc = file("dane.php");
  4. echo $zawartosc[2]; // jak chce to co wyświetli echo to daje eval($zawartosc[2])
  5. fclose($Plik);
  6. ?>


plik dane.php
  1. <?php
  2. dziala // Tylko dla testu nie zwracać uwagi
  3. echo 'dziala';
  4. ?>


i teraz mogę zamieniać dane, zmienne z pliku dane.php (tak chciałem) używając str_replace('$StaraZmienna', '$NowaZmienna', $dane[numer_tablicy]);

ale jak już to zmienie np tak
  1. <?
  2. $Plik = fopen("dane.php", "r+");
  3. $zawartosc = file("dane.php");
  4. $zamien= str_replace("echo 'dziala';", "echo 'ok';", $zawartosc[2]);
  5. fclose($Plik);
  6. ?>

to jak zapisać te zmiany do tego pliku dane.php ? coś z fputs trzeba ? ale tam chyba trzeba podać od kąd ma zacząć dodawać a ja tak nie chcę bo długośc danych w zmiennej może być inna... help
Cysiaczek
ekhem - po co Ci w takim razie fopen(), skoro uzywasz potem file() questionmark.gif?
manual się kłania smile.gif
Lee
Nie rozumiem...mam skasować
  1. <? $Plik = fopen("config.php", "r+"); ?>
i zarazem usunac
  1. <? fclose($Plik); ?>
?
dobra, ale co z moim pytaniem w poprzednim poście ?
Cysiaczek
Robisz sobie zupełnie niepotrzebnie kłopot. jak masz tablicę zmiennych, to ją zapisuj całą do pliku, a nie wiersz po wierszu (albo własnie wietrsz po wierszu, ale dla każdego welementu tablicy).

Możesz mi jednak wytłumaczyć po co ty wogóle ten plik tak zczytujesz? Pomysl na XML'em, bo łatwiej Ci pójdzie.
Lee
bo chcę plik konfiguracyjny zrobić z możliwością edycji niektórych danych z niego w panelu admina. Mówię niektórych bo chodzi mi tylko o dane potrzebne do połączenia z mysql i o dane do meta tagów, a reszta (warunki itp) chcę zostawić bez zmian...
Cysiaczek
UU. No to wogóle złe podejście - lepiej takie informacje przechowuj w stringu XML (nie w samym pliku)
Użyj simpleXML do odczytania tego stringu, modyfikacji danych i na koniec zapisu. Robiąc tak jak do tej pory, to jedyne co osiągniesz, to nerwica przed trzydzistką smile.gif
Lee
a znasz może jakiś poządny i zrozumiały kurs XML ?
Cysiaczek
Raczej nie... :/ musisz poszukac w sieci. Dla mnie, to wszystkie kursy XML sa bez ładu i składu - pisane jakby sam autor nie wierzył w to, co pisze. :|
strife
Przeczytałem cały ten temat, i nie bardzo wiem o co Ci chodzi, więc napiszę tak jak to zrozumiałem, chcesz odczytać za pomocą skryptu plik na serwerze, ale nie udaje Ci się to z plikiem, który ma rozszerzenie *.php. Błędy jakie tutaj popełniłeś to napewno, użycie » fopen" title="Zobacz w manualu php" target="_manual, a następnie » file" title="Zobacz w manualu php" target="_manual co jest niezrozumiałe i świadczy o tym, że nie doczytałeś w manual'u co dana funkcja robi.

» Przechodząc do sedna, poprawny kod, będzie wyglądał tak:

  1. <?php
  2. $file = 'data.php';
  3.  
  4. /** 
  5.  * zawartosc pliku data.php wyglada tak:
  6.  * <?php
  7.  * $Title = "Main Page";
  8.  * echo $Title;
  9.  * ? >
  10. */
  11.  
  12.  
  13. // odczytywanie danych 
  14. $handle = fopen( $file, "r+" );
  15. $read  = fread( $handle, filesize( $file ) );
  16. fclose( $handle );
  17.  
  18. echo $read; // nic nie wyswietli czemu? Klamia sie znajomosc html'a!
  19. // HINT: Zobacz zrodlo
  20. ?>


  1. <?php
  2. // zapis danych
  3. $handleFile = fopen( $file, "r+" );
  4. $readFile  = fread( $handleFile, filesize( $file ) );
  5. fclose( $handleFile );
  6.  
  7. // powiedzmy zamiana zmiennej w pliku data.php
  8. $string = str_replace( '$Title', '$replaceTitle', $readFile );
  9. $handle = fopen( $file, "w+" );
  10. fwrite( $handle, $string );
  11. fclose( $handle );
  12.  
  13. ?>

Otwiera on, plik dane.php i umożliwia jego zapisanie. Zastanawia mnie jednak fakt, co takiego chcesz uzyskać w ten sposób, jakie dane chcesz trzymać w tym pliku, bo możliwe, że idziesz w złym kierunku i lepiej było by użyć chociażby plików ini ( » parse_ini_file" title="Zobacz w manualu php" target="_manual ).

Pozdrawiam!
Lee
No dobra mam plik config.php o kodzie
  1. <?php ob_start();
  2.  
  3. // Dane potrzebne do połączenia z bazą danych
  4. $host = "localhost";
  5. $user = "xxx";
  6. $pass = "xxx";
  7. $db_name = "xxx";
  8. $prefix = 'xxx';
  9.  
  10. if (!empty($prefix)){
  11.  $tbl_newsy = $prefix.'newsy';
  12.  $tbl_komentarze = $prefix.'komentarze';
  13.  $tbl_administratorzy = $prefix.'administratorzy';
  14.  $tbl_kategorie = $prefix.'kategorie';
  15.  $tbl_menu = $prefix.'menu';
  16.  $tbl_config = $prefix.'config';
  17.  $tbl_uzytkownicy = $prefix.'uzytkownicy';
  18.  $tbl_pw = $prefix.'pw';
  19. }
  20. else if (empty($prefix)){
  21. $tbl_newsy = 'newsy';
  22. $tbl_komentarze = 'komentarze';
  23. $tbl_administratorzy = 'administratorzy';
  24. $tbl_kategorie = 'kategorie';
  25. $tbl_menu = 'menu';
  26. $tbl_config = 'config';
  27. $tbl_uzytkownicy = 'uzytkownicy';
  28.  $tbl_pw = $prefix.'pw';
  29. }
  30. $kolor[1] = '#666666';
  31. $kolor[2] = '#999999';
  32. $kolor[3] = '#000000';
  33. $kolor[4] = '#212121';
  34.  
  35. $IleNewsow = 10;
  36. $stopka = '&copy; Copyright 2006 by Lee. All rights reserved.';
  37.  
  38. // Ile ma pokazywać newsów na stronie głównej
  39. define('ILOSC_WYNIKOW_NA_STRONIE', $IleNewsow);
  40.  
  41. // Połączenie z bazą danych
  42. $sql = mysql_connect($host, $user, $pass);
  43. mysql_select_db ("$db_name");
  44. ?>
i chciałbym mieć możliwośc edycji zmiennych potrzebnych do połączenia z bazą danych oraz zmiennej $IleNewsow i $Stopka (w przyszłości może dodją nastepne zmienne). Odległości moga się zmieniać...

btw. już 100 postów na tym forum smile.gif
strife
W pliku konfiguracyjnym dajesz połączenie i wybranie bazy danych, trochę dziwnie, ale mniejsza o to, podam Ci rozwiązanie oparte o to co mówiłem wcześniej:

» Główny plik czytający dane konfiguracyjne
  1. <?php
  2. function setParam( $name, $param )
  3. {
  4.  
  5. // odczyt pliku konfiguracyjnego
  6. $configFile = parse_ini_file( 'data.php' );
  7.  
  8. $configFile[ $name ] = $param;
  9.  
  10. $strConfigFile = NULL;
  11. foreach( $configFile as $key => $value )
  12. {
  13. $strConfigFile .= $key . " = " . $value . "n";
  14. }
  15.  
  16. $h = fopen( 'data.php', "w+" );
  17. fwrite( $h, ";<?php die(); ?>n" . $strConfigFile );
  18. fclose( $h );
  19.  
  20. } 
  21.  
  22. setParam( 'host', 'php.pl' );
  23.  
  24. $array = parse_ini_file( 'data.php' );
  25. echo '<pre>';
  26. print_r( $array );
  27.  
  28. ?>

» Przykładowy plik ini ( data.php )
  1. ;<?php die(); ?>
  2. host = php.pl
  3. baza = baza
  4. user = test
  5. pass = test
  6. template = default
  7. link_method = PATH


Pozdrawiam
NetJaro
.. a może funkcja eval" title="Zobacz w manualu php" target="_manual. winksmiley.jpg
Lee
@UP
Nie rozumiem w czym miała by pomóc funkcja eval() :|

@2UP
Czy ten skrypt przewiduje, że plik config.php zawiera nie tylko zmienne ale także np. warunki ? np
  1. <?
  2. $db_user = 'blabla';
  3. if (podane coś tam) { rób coś tam}
  4. else { rób coś innego }
  5. ?>

questionmark.gif
Cysiaczek
Plik konfiguracyjny ma z założenia przechowywać informacje dotyczące konfiguracji, tj. sposobu działania całości, lub fragmentu aplikacji. Jeśli umieścisz w takim pliku instrukcje warunkowe, to zepsujesz taki plik. Plik konfiguracyjny (jego zawartość [dane]) powinny być przetworzone przez odpowiedni kod, w którym możesz sobie poprzez warunki wykonywać różne rzeczy. Taki kod

  1. <?php
  2. if ($czyMogeZrobicTo == 1){
  3. $czyMogeZrobicCosInnego=1;
  4. }
  5. ?>


Nie powinien się znajdować w pliku konfiguracyjnym. Trzymaj w nim same dane. Są oczywiście odstępstwa od tej reguły, ale trzeba je naprawdę mocno uzasadnić. [jeśli ktoś się ze mną nie zgadza, to możemy odyskutować winksmiley.jpg]
Lee
no dobra w przypadku gdy w pliku konfiguracyjnym mam same zmienne to ten kod będzie działał ?
Cysiaczek
U mnie kod strifa działa, więc raczej powinien działać. smile.gif
strife
Cytat(Lee @ 7.07.2006, 16:35 ) *
no dobra w przypadku gdy w pliku konfiguracyjnym mam same zmienne to ten kod będzie działał ?

Tak trudno to sprawdzić samemu ? dry.gif
Lee
No nie jest wszystko ok, bo
1. mogę zmieniąc tylko jedną zmienną a reszta ulega kasacji (w+);

mój kod wyglada tak
  1. <?
  2. function setParam( $name, $param ){
  3.  
  4. // odczyt pliku konfiguracyjnego
  5. $configFile = parse_ini_file( 'config.php' );
  6.  
  7. $configFile[ $name ] = $param;
  8.  
  9. $strConfigFile = NULL;
  10. foreach( $configFile as $key => $value ){
  11. $strConfigFile .= $key . " = " . $value . "n";
  12. }
  13.  
  14. $h = fopen( 'config.php', "w+" );
  15. fwrite( $h, "<?php n" . $strConfigFile . "?> n ");
  16. fclose( $h );
  17.  
  18. } 
  19.  
  20. setParam( '$host', """. $host . "";n"); // Host
  21. setParam( '$user', """. $user . "";n"); // User
  22. setParam( '$pass', """. $pass . "";n"); // Pass
  23. setParam( '$db_name', """. $db_name . "";n"); // DB Name
  24. setParam( '$prefix', """. $prefix . "";nn"); // Prefix
  25. setParam( '$IleNewsów', "". $IleNewsow . "n"); // IleNewsów
  26. setParam( '$stopka', """. $stopka . "";n"); // Stopka
  27. setParam( '$kolor[1]', """. $kolor[1] . "";"); // Kolor[1]
  28. setParam( '$kolor[2]', """. $kolor[2] . "";"); // Kolor[2]
  29. setParam( '$kolor[3]', """. $kolor[3] . "";"); // Kolor[3]
  30. setParam( '$kolor[4]', """. $kolor[4] . "";"); // Kolor[4]
  31. ?>


tak wiem ze, za kazdym wywołaniem funkcji czyści plik i dopisuje dane, ale może wiecie co w tym kodzie edytować :|

Update
poradziłem sobie wywaliłem tą całą funkcje i zrobiłem tak
  1. <?
  2. $h = fopen( 'config.php', "w+" );
  3. fwrite( $h, '<?php
  4.  
  5. $host = "'.$host.'";
  6. $user = "'.$user.'";
  7. $pass = "'.$pass.'";
  8. $db_name = "'.$db_name.'";
  9. $prefix = "'.$prefix.'";
  10.  
  11. $IleNewsow = "'.$IleNewsow.'";
  12. $stopka = "'.$stopka.'";
  13. $kolor[1] = "'.$kolor[1].'";
  14. $kolor[2] = "'.$kolor[2].'";
  15. $kolor[3] = "'.$kolor[3].'";
  16. $kolor[4] = "'.$kolor[4].'";
  17.  
  18. ?> ');
  19. fclose( $h );
  20. ?>

Fakt taktem, że może nieefektownie to wygląda ale działa tak jak chciałem winksmiley.jpg
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.