Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z utworzeniem pliku w katalogu.
Forum PHP.pl > Forum > PHP
atasze
Witam,
napotkałem na następujący problem mianowicie, posiadam skrypt który tworzy katalog z wygenerowaną nazwą tzn.
Kod
$nowykatalog = date("Y.m.d");

if (file_exists($nowykatalog))
    {
    echo "<B>Katalog</B><font color=red> $nowykatalog </font><B>istnieje.</B>";
    }
    else
    {
    echo "<B>Katalog</B><font color=red> $nowykatalog </font><B>nie istnieje.</B>";
    mkdir($nowykatalog, 0755);
    chmod($nowykatalog, 0777);
    }

następnie ma za zadanie utworzyc plik.txt w tym wygenerowanym katalogu.
Czy ja dobrze kombinuję?
Kod
$nowyplik = '/costam/'.$nowykatalog.'/plik.txt';

if (file_exists($nowyplik))
    {
    echo "<B>Plik</B><font color=red> $nowyplik </font><B>istnieje.</B>";
    }
    else
    {
    echo "<B>Plik</B><font color=red> $nowyplik </font><B>nie istnieje.</B>";
    $f = fopen($nowykatalog.'/plik.txt', 'a+');
    fwrite($f, 'To jest nowa zawartosc pliku');
    fclose($f);
    }

Skrypt nie potrafi mi utworzyc pliku w tym katalogu. Macie jakies pomysły?
bartekmedon
Najprościel chyba :

  1. <?php
  2. $lokalizacja = "folder/folder/plik.txt";
  3. if ( !(file_exists($lokalizacja)) )
  4. {
  5.  $plik = @fopen($lokalizacja,"w+");
  6.  fputs($plik,"jakas zawartosc");
  7.  fclose($plik);
  8. }
  9. ?>


Przy operacjach na plikach itd pamiętaj o odpowiednich prawach
andchaos
1. jak używasz funkcji fwrite() to o ile się nie myle należy podać trzy argumenty -> fwrite($f,'To jest nowa zawartosc pliku',28); z czego ten ostatni określa liczbę bajtów, która mają być zapisane w pliku, stosuje się tylko jak chcesz zapisać tylko fragment ciągu znaków, jak zapisujesz całość to najlepiej użyć funkcji fputs($f, 'To jest nowa zawartosc pliku'); no dobra, ale to nie może być przyczyną że nie utworzy ci się nowy plik, albo?questionmark.gif?.

2. poza tym mi wygląda wszystko na dobrze, ewentualnie może być że serwer na którym umieszczona jest stronka blokuje tą funkcję, spotkałem się z tym że darmowe serwisy hostingowe mają zablokowane używanie takich funkcji jak fopen() czy mail().
atasze
To nie wina serwera, ogólnie tworzy mi kazdy inny plik ale w katalogu nadrzednym a ja chce utworzyc ten plik w katalogu podrzędnym który co dzien dynamicznie sie generuje jesli ktos odpali skrypt z przegladarki. Kod strony wygląda następująco:
  1. <?php
  2. $nowykatalog = date("Y.m.d");
  3. $nowyplik = '/costam/'.$nowykatalog.'/plik.txt';
  4.  
  5. if (file_exists($nowykatalog))
  6. {
  7. echo "<B>Katalog</B><font color=red> $nowykatalog </font><B>istnieje.</B>";
  8. }
  9. else
  10. {
  11. echo "<B>Katalog</B><font color=red> $nowykatalog </font><B>nie istnieje.</B>";
  12. mkdir($nowykatalog, 0755);
  13. chmod($nowykatalog, 0777);
  14. }
  15. if (file_exists($nowyplik))
  16. {
  17. echo "<B>Plik</B><font color=red> $nowyplik </font><B>istnieje.</B>";
  18. }
  19. else
  20. {
  21. echo "<B>Plik</B><font color=red> $nowyplik </font><B>nie istnieje.</B>";
  22. $plik = fopen($nowyplik, 'a+');
  23. fputs($plik,"jakas zawartosc");
  24. fclose($plik);
  25. }
  26. ?>

Error log:
Kod
Katalog 2007.10.16 istnieje.
Plik /costam/2007.10.16/plik.txt nie istnieje.

Warning: fopen() [function.fopen]: open_basedir restriction in effect. File(/costam/2007.10.16/plik.txt) is not within the allowed path(s): (/home/fotoolek:/usr/lib/php:/usr/local/lib/php:/tmp) in /home/fotoolek/public_html/kamil/costam/test.php on line 22

Warning: fopen(/inwigilator/2007.10.16/plik.txt) [function.fopen]: failed to open stream: Operation not permitted in /home/fotoolek/public_html/kamil/costam/test.php on line 22

Warning: fputs(): supplied argument is not a valid stream resource in /home/fotoolek/public_html/kamil/costam/test.php on line 23

Warning: fclose(): supplied argument is not a valid stream resource in /home/fotoolek/public_html/kamil/costam/test.php on line 24
bartekmedon
Ale jeśli ja dobrze widzę to kiedy Twój plik jeszcze nie istnieje stosujesz fopen z parametrem (2) a+ - a z tego co mi wiadomo a+ otwiera plik do odczytu oraz do dopisywania , ale nie pozwala na utworzenie pliku. Dlatego powinieneś użyć w+
franki01
Sprobuj:

  1. <?php
  2. // ...........
  3. mkdir($nowykatalog, 0777);
  4. // ...........
  5. ?>



0755 zamienione na 0777
atasze
Dzięki już sobie poradziłem z tym problemem, problem polegał na tym, że nie wskazałem bezwzględnej ścieżki do pliku. biggrin.gif
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.