Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problem z fopen()
zalazdi
post 25.02.2010, 16:45:40
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 25.02.2010
Skąd: Elbląg

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


Witam.
A więc do rzeczy. Mam problem ze skryptem. A więc tak, piszę klasę (pseudo) "bazy danych" na plikach. Mam jedną metodę:
  1. private function writeFile() {
  2. if ($f = fopen(EMAILS_FILE, "w")) {
  3. foreach($this -> file as $linia){
  4. fputs($f, $linia);
  5. }
  6. fclose($f);
  7. }
  8. }

Stałą definiuję na samym początku pliku:
  1. define('EMAILS_FILE', 'mails.txt');

CHMOD`y na plik mails.txt ustawione na 777 (żebym nie miał wątpliwości co do tego).

Występuje błąd:
Kod
Warning: fopen(mails.txt) [function.fopen]: failed to open stream: Permission denied in /home/krzysiek/server/public_html/mailing/index.php on line 55

Linia 55 -
  1. if ($f = fopen(EMAILS_FILE, "w")) {


Co najlepsze, gdy ten kod umieszczę nie w klasie, a bezpośrednio w kodzie (nie wiem jak to nazwać) to wszystko działa. Oczywiście zmieniam zmienną $this -> file

No więc pytanie brzmi:
Jak to naprawić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
erix
post 25.02.2010, 17:18:08
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. f ($f = fopen(EMAILS_FILE, "w")) {
  2. foreach($this -> file

Ekhm, a ten wskaźnik w ogóle istnieje?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
zalazdi
post 25.02.2010, 17:23:41
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 25.02.2010
Skąd: Elbląg

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


Tak, istnieje (jako tablica oczywiście).
Go to the top of the page
+Quote Post
erix
post 25.02.2010, 17:30:00
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ale możesz mi powiedzieć, co te linijki mają robić? Bo jedną otwierasz plik, drugą robisz co innego, może pokaż cały kod klasy, a nie tylko urywek?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
zalazdi
post 25.02.2010, 17:42:19
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 25.02.2010
Skąd: Elbląg

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


No ok, cały kod pliku:
  1. <?php
  2. define('EMAILS_FILE', 'mails.txt');
  3. class database {
  4. private $file;
  5. private $count;
  6.  
  7. public function __construct() {
  8. $this -> file = file(EMAILS_FILE);
  9. $this -> getCount();
  10. }
  11.  
  12. public function __destruct() {
  13. $this -> writeFile();
  14. }
  15.  
  16. public function getAllData() {
  17. for($i = 0;$i < $this -> count;++$i) {
  18. $a = explode("||", $this -> file[$i]);
  19. $array[$i]['id'] = $i;
  20. $array[$i]['imie'] = $a[0];
  21. $array[$i]['nazwisko'] = $a[1];
  22. $array[$i]['grupa'] = $a[2];
  23. $array[$i]['email'] = $a[3];
  24. }
  25. return $array;
  26. }
  27.  
  28. public function getGroups() {
  29. $groups = Array();
  30. for($i = 0;$i < $this -> count;++$i) {
  31. $a = explode("||", $this -> file[$i]);
  32. if ($a[0] != '') {
  33. if (!in_array($a[2], $groups)) {
  34. $groups[] = $a[2];
  35. }
  36. }
  37. }
  38.  
  39. return $groups;
  40. }
  41.  
  42. public function delete($id) {
  43. unset($this -> file[$id]);
  44. }
  45.  
  46. public function add($imie, $nazwisko, $grupa, $email) {
  47. $this -> file[] = $imie."||".$nazwisko."||".$grupa."||".$email."\n";
  48. }
  49.  
  50. public function edit($imie, $nazwisko, $grupa, $email, $id) {
  51. $this -> file[$id] = $imie."||".$nazwisko."||".$grupa."||".$email."\n";
  52. }
  53.  
  54. private function writeFile() {
  55. if ($f = fopen(EMAILS_FILE, "w")) {
  56. foreach($this -> file as $linia){
  57. fputs($f, $linia);
  58. }
  59. fclose($f);
  60. }
  61. else
  62. echo 'Error - open file';
  63. }
  64.  
  65. private function getCount() {
  66. $this -> count = count($this -> file);
  67. }
  68. }
  69.  
  70. $db = new database();
  71. $db -> add('Imię', 'Nazwisko', 'księgowi', 'adres@mail');
  72. ?>


Wiem, że cud programistyczny to nie jest smile.gif
Go to the top of the page
+Quote Post
Pilsener
post 25.02.2010, 22:12:01
Post #6





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Przydałby Ci się tutek o plikach tekstowych:
http://www.forumweb.pl/viewtopic.php?t=39103

Cytat
Co najlepsze, gdy ten kod umieszczę nie w klasie, a bezpośrednio w kodzie (nie wiem jak to nazwać) to wszystko działa
- no ja też nie wiem, ale czy hermetyzacja nie obejmuje stałych?
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 Wersja Lo-Fi Aktualny czas: 19.07.2025 - 12:52