Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: file_put_contents() - brak błędów, dane nie są zapisywane
Forum PHP.pl > Forum > PHP
PotasK
Natknąłem się dzisiaj na pewien problem, którego nie mogę rozwiązać. Pierwszy raz widzę takie cuda.

Użyłem file_put_contents() do zapisania zaserializowanej tablicy:
  1. file_put_contents(DIR_ROOT . 'cache/libmap.cache', serialize($map));

Nie jest zwracany żaden błąd, pomimo ustawienia error_reporting na E_ALL | E_STRICT w php.ini.
Faktem jest, że ostatnio reinstalowałem serwer apache, php i mysql.
Ponadto, pierwszy parametr jest ścieżką absolutną do pliku.
Drugi parametr nie jest pusty, ponieważ to sprawdzałem.
Funkcja zwraca int > 0 (dokładnie na chwilę obecną 831).
Uprawnienia i katalogu cache, i pliku libmap.cache, ustawiłem na 0777.

Pomimo tego wszystkiego, do pliku nie jest nic zapisywane.

Jeśli ktoś ma jakieś pytania albo potrzebuje dodatkowych informacji, to dajcie znać.

Z góry wielkie dzięki za pomoc.
viking
error_reporting(-1);
PotasK
Cytat(viking @ 25.05.2012, 11:57:15 ) *
error_reporting(-1);


Bez zmian.
mls
Cytat(PotasK @ 25.05.2012, 11:54:23 ) *
Ponadto, pierwszy parametr jest ścieżką absolutną do pliku.
Drugi parametr nie jest pusty, ponieważ to sprawdzałem.
Funkcja zwraca int > 0 (dokładnie na chwilę obecną 831).


Funkcja zwraca ilość zapisanych do pliku bajtów. Czyli wszystko się zgadza, zapisane zostało 831 B. Gdyby wystąpił błąd podczas zapisu, zwrócone byłoby FALSE.
Problemem jest tu prawie na pewno ścieżka do pliku - zapewne nie zawiera tego, czego się spodziewasz.
rocktech.pl
Witam.

Zabierz się do tego obiektowo.

  1. //Zapis
  2. $cache_file = new SplFileObject ( DIR_ROOT . 'cache/libmap.cache', "a+" );
  3. $cache_file->fwrite ( serialize ( $map ) );
  4. //Odczyt
  5. $cache_file->rewind ();
  6. $data = unserialize ( $cache_file->fgets () );


Nic dodania poza tym co napisane.
PotasK
Cytat
Problemem jest tu prawie na pewno ścieżka do pliku - zapewne nie zawiera tego, czego się spodziewasz.


Zawiera, to, czego się spodziewam, wygląda to tak:
  1. // ...
  2. protected $_cacheFile = 'cache/libmap.cache';
  3. // ...
  4. var_dump(\DIR_ROOT . $this->_cacheFile);

I tak, ukośnik przed DIR_ROOT jest potrzebny, ponieważ stała ta jest zdefiniowana w domyślnej przestrzeni nazw, a klasa jest umieszczona w innej.

A wynikiem jest:
Kod
/var/www/peridot/cache/libmap.cache


@EDIT:
rocktech.pl, no i w ten sposób też nie działa, myślę, że to bardziej coś po stronie serwera, ale nie mogę wpaść na to, co?

Dobra, problem rozwiązany. Temat do zamknięcia.

Okazało się, że zamiast sprawdzać, czy zawartość pliku została zapisana na serwerze, sprawdzałem w katalogu projektu.
Przepraszam za zamieszanie.
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.