Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z fopen()
Forum PHP.pl > Forum > PHP
zalazdi
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ć?
erix
  1. f ($f = fopen(EMAILS_FILE, "w")) {
  2. foreach($this -> file

Ekhm, a ten wskaźnik w ogóle istnieje?
zalazdi
Tak, istnieje (jako tablica oczywiście).
erix
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?
zalazdi
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
Pilsener
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?
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.