Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: odczyt danych + dafine i serializacja
Forum PHP.pl > Forum > Przedszkole
Apo
Witam
Mam dane zapisane w pliku txt. Chciałem uniemożliwić odczyt ich danych poprzez zrobienie takiego czagoś:
(plik: baza.txt)
<?php
define('DATA', tablica po serializacji);
?>
///koniec

No i z zapisywaniem nie ma problemu ale jak to odczytać bo zrobiłem taką funkcjie ale jest źle:
  1. <?php
  2. function show( $baza ) {
  3. if(!file_exists($baza) || filesize($baza) == 0) {}
  4. else
  5. {
  6. $dane = '';
  7. $h = fopen($baza, 'r');
  8. flock($h, LOCK_SH);
  9. fread($h, filesize($baza));
  10. flock($h, LOCK_UN);
  11. fclose($h);
  12. if(defined('DATA'))
  13. {
  14. $dane = unserialize('DATA'); 
  15. }
  16. else
  17. {
  18. $dane = array();
  19. }
  20. echo '<pre>'.print_r($dane, 1).'</pre>';
  21. return;
  22. }
  23. }
  24. ?>

Prosze o poprawienie mnie.
johnson
pierwsze primo to w pliku baza.txt powinieneś trzymać tylko zserializowany ciąg, a nie jakiś kod php ze stałą DATA

drugie primo to to co przeczyta funkcja fread powinieneś przypisać do jakiejś zmiennej, czyli:
$data = fread($h, filesize($baza));

i wtedy unserializować zmienną $data

innym rozwiązaniem może być też, jeśli zostawisz plik baza.txt w obecnej postaci, użycie zamista fopen, fread itd. funkcji include('baza.txt'), wtedy może to zadziałać (choć 100% pewności nie mam), ale moim zdaniem jest to rozwiązanie brzydkie i go nie polecam smile.gif
Apo
Jeśli dane w pliku nie będą miały takiego kodu php to ktoś może ja podejrzeć a tam mogą być np hasła. A ja nie umie zrobić dego odczytania zserializowanych danych w DATA.
mike
Taka tablica:
Kod
Array
(
    [host] => localhost
    [user] => admin
    [pass] => tajne hasło
    [db] => baza testowa
)

po zserializowaniu wygląda tak:
Kod
a:4:{s:4:"host";s:9:"localhost";s:4:"user";s:5:"admin";s:4:"pass";s:11:"tajne hasło";s:2:"db";s:12:"baza testowa";}


IMO równiedobrze możesz trzymać to w zwykłym pliku .txt otwartym tekstem. I tak jest malo bezpieczne.

A co do odczytu:
  1. <?php
  2.  
  3. $strFile = file_get_contents( 'data.txt' );
  4.  
  5. $arrDB = unserialize( $strFile ); 
  6.  
  7. ?>


BTW jak nazwiesz plik .data to serwer go nie wyświetli.
johnson
jeśli w ten sposób chcesz ukryć hasła to marny pomysł bo serializacja do tego nie służy, serializacja służy do przechowywania zmiennej tablicowej w postaci stringa, jednak ona nie koduje w żaden sposób danych i hasło można sobie spokojnie z takiej serializacji odczytać

napisz najlepiej dokładnie jaki masz problem, tzn. co chcesz osiągnąć dzięki takiej konstrukcji, wtedy będzie można podać jakieś rozwiązanie, bo myślę, że coś sobie umyśliłeś jednak, jak przypuszczam, nie jest to dobre rozwiązanie Twojego problemu
Apo
Niechce chować haseł po serializacji tylko uniemożliwic odczyt pliku z danymi poprzez zrobienie takiego czegoś w pliku:
<?php define('DATA', 'a:4:{s:4:"host";s:9:"localhost";s:4:"user";s:5:"admin";s:4:"pass";s:11:"tajne hasło";s:2:"db";s:12:"baza testowa";}');
?>

No i wtedy jak ktoś otworzy ten plik to nic nie zobaczy. No i teraz jak mam właśnie tak zapisane dane to jak moge odczytać dane z pliku i odserializować stałą DATA :?:
crash
A może coś takiego:
cfg.ini.php:
  1. ;<?php die( 'Dostęp zabroniony!' ); ?>
  2.  
  3. [db]
  4. host = db.lan
  5. user = crash
  6. pass = haslo
  7. name = baza


Odczytanie danych:
  1. <?php
  2. $cfg = parse_ini_file( './cfg.ini.php' );
  3.  
  4. print_r( $cfg );
  5. ?>
Apo
crash tak też robiłem ale mi chodzi o przykład z tym define bo mi to spokoju nie daje :/
crash
Cytat(Apo @ 2005-12-24 16:34:30)
Niechce chować haseł po serializacji tylko uniemożliwic odczyt pliku z danymi poprzez zrobienie takiego czegoś w pliku:
<?php define('DATA', 'a:4:{s:4:"host";s:9:"localhost";s:4:"user";s:5:"admin";s:4:"pass";s:11:"tajne hasło";s:2:"db";s:12:"baza testowa";}');
?>

No i wtedy jak ktoś otworzy ten plik to nic nie zobaczy. No i teraz jak mam właśnie tak zapisane dane to jak moge odczytać dane z pliku i odserializować stałą DATA :?:

No ale przecież to jest plik *.txt, nieważnie co za kod php tam dasz to i tak każdy to zobaczy...
Apo
nie bo można dac rozszeżenie php i chmod 666 i jest wszystko wtedy ok
crash
Cytat(Apo)
Witam
Mam dane zapisane w pliku txt.

No to o co Ci w końcu chodzi?!
johnson
Cytat(crash @ 2005-12-24 17:00:30)
No to o co Ci w końcu chodzi?!

przyłączam się do pytania, kompletnie nie mam pojęcia jaki cel Ci przyświeca postępując w ten sposób, mógłbyś w końcu napisać o co Ci chodzi? co i przed kim chciałbyś ukryć?
Apo
tu macie przykład takiego skryptu napisanego przez ascona post 3:
http://www.haxite.org/index.php3?site=foru...D=61719&start=0
Tylko ze tam nie ma odczytu danych z pliku.
dr_bonzo
A nie mozesz tego pliku z danymi przesunac poza public_html (DocumentRoota serwera www)?
Apo
wiem że tak można i chyba tak zrobie ale zależy mi żeby wiedzieć jak odczytywać te dane :?
johnson
Cytat(Apo @ 2005-12-25 15:15:29)
tu macie przykład takiego skryptu napisanego przez ascona post 3:
http://www.haxite.org/index.php3?site=foru...D=61719&start=0
Tylko ze tam nie ma odczytu danych z pliku.

odczyt pliku w tamtym skrypcie realizowany jest przez funkcję include() i dlatego dane w tym pliku są napisane w formie php:
  1. <?php
  2. define('DATA', tablica po serializacji);
  3. ?>

ponieważ po zastosowaniu include("nazwapliku.php") stała jest od razu dostępna jako DATA i można ją od razu odserializować, jeśli Ty zmienisz rozszerzenie na .txt i użyjesz odczytu fopen, fread to taki zapis:
  1. <?php
  2. define('DATA', tablica po serializacji);
  3. ?>

jest kompletnie pozbawiony sensu.

Jeśli zaś chodzi o ukrycie tego pliku, to możesz go przecież nazwać np. dfjhdukj47583.php i użyć funkcji include('dfjhdukj47583.php') zresztą nie jest to konieczne, gdyż jeśli ktoś nawet wpisze taki plik do przeglądarki to nic mu się nie pokaże (pod warunkiem, że plik będzie miał rozszerzenie .php) natomiast jeśli ktoś wejdzie na serwer poprzez ftp, ssh itp. to umieszczenie pliku poza public_html i tak nic nie da.

Reasumując:
1. zapisujesz dane w postaci:
  1. <?php
  2. define('DATA', tablica po serializacji);
  3. ?>

w pliku data.php
2. odczyt realizujesz poprzez include('data.php')
3. wtedy masz dostęp do stałej DATA i możesz ją swobodnie odserializować

z zapisem mówiłeś, że sobie poradziłeś, więc nic nie piszę na ten temat.
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.