• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP - Problem z zapisem do pliku .txt

Cloud VPS
0 głosów
1,168 wizyt
pytanie zadane 26 maja 2015 w PHP przez TomWaw.IT Użytkownik (920 p.)
edycja 26 maja 2015 przez TomWaw.IT

Witam, zdaję sobie sprawę z tego, że powodem jest brak uprawnień skryptu do zapisu/ odczytu, ale nie wiem jak to zmienić. Używam pakietu XAMPP.

PS.1: Zależy mi na poprawnym działaniu funkcji fopen() z trybem "a", tzn aby program sam utworzył plik zamówienia.txt

Przy próbie zapisu danych do pliku .txt wyświetlają się błędy:

Warning: fopen(C:/.../xampp/htdocs/../zamowienia/zamowienia.txt): failed to open stream: No such file or directory in C:\...\xampp\htdocs\vad\1\przetworzzamowienie.php on line 101

Warning: flock() expects parameter 1 to be resource, boolean given in C:\...\xampp\htdocs\vad\1\przetworzzamowienie.php on line 103

Warning: fwrite() expects parameter 1 to be resource, boolean given in C:\...\xampp\htdocs\vad\1\przetworzzamowienie.php on line 112

Warning: flock() expects parameter 1 to be resource, boolean given in C:\...\xampp\htdocs\vad\1\przetworzzamowienie.php on line 113

Warning: fclose() expects parameter 1 to be resource, boolean given in C:\...\xampp\htdocs\vad\1\przetworzzamowienie.php on line 114

 

A to fragment kodu PHP:

$wp = fopen ("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'ab'); 

        flock($wp, LOCK_EX);

        fwrite($wp, $ciagwyjsciowy, strlen($ciagwyjsciowy));
        flock($wp, LOCK_UN);
        fclose($wp);

2 odpowiedzi

+1 głos
odpowiedź 26 maja 2015 przez Comandeer Guru (607,100 p.)
Wygląda jak kod z nieśmiertelnego vademecum profesjonalisty

Błędy braku uprawnień do zapisu są dość nietypowe dla windowsa - bardziej bym upatrywal przyczyny w tym, że katalogu zamowienia nie ma w odpowiednim miejscu. Jeśli jest, to kliknij prawym, wybierz "właściwości" i sprawdź czy nie jest zaznaczone choćby "tylko do odczytu"
komentarz 26 maja 2015 przez TomWaw.IT Użytkownik (920 p.)

Wszystko się zgadza to kod z vademecum ;) 

Myslę że to dobry trop, lecz po odznaczeniu "tylko do oczytu" i  zastosowaniu zmian, gdy wchodzę ponownie w "właściwości" katalogu znów okienko "tylko do oczytu" jest zaznaczone... Tak jakby "coś" z góry narzucało że katalog ma być tylko do odczytu..?

PS. W książce napisano: "nalezy upewnić się, czy skrypt, który jest stosowany, posiada prawo dostępu do danego pliku. Zależnie od konfiguracji serwera, skrypt może być uruchomiony z prawami użytkownika serwera WWW lub z prawami właściciela swojego katalogu"...

 

komentarz 26 maja 2015 przez Comandeer Guru (607,100 p.)
Dawno na windowsie mnie nie było, ale kojarzę, że było coś typu "Uruchom jako administrator". Jeśli da się Eksplorator Windows w taki sposób uruchomić, to być może wówczas zmiana uprawnień pliku się zapisze
komentarz 26 maja 2015 przez TomWaw.IT Użytkownik (920 p.)

Udało mi się rozwiązac problem stasując w kodzie ścieżkę zapisu:

"../zamowienia/zamowienia.txt"  (na logikę) zamiast: 

"$DOCUMENT_ROOT/../zamowienia/zamowienia.txt" (proponowana w książce)

przy czym:  $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];

Czy ktoś może wyjaśnić mi dlaczego sposób z książki u mnie nie działa? 

 

komentarz 26 maja 2015 przez Comandeer Guru (607,100 p.)

A obadaj se przy pomocy var_dump co tam siedzi

0 głosów
odpowiedź 26 maja 2015 przez Jolan Obywatel (1,380 p.)

mam takiego gotowca (licznik odwiedzin) możesz oczywiście musisz utowrzyć plik licznik.txt

<?php
$czas=date('Y-m-d H:i:s');

// zapisywanie ip do pliku
$ipadd = getenv(REMOTE_ADDR);
$addip = "TRUE";
$hits = 0;

/* plikowi nadaj atrybuty 777 */
$file = "licznik.txt";


if (file_exists($file))
{
} else
{
echo "$file nie istnieje!";
exit;
}


$fp = fopen($file,"r");
while (!feof($fp))
{
$line = fgets($fp, 4096); //czas
$line=trim($line);
if ($line != "")
{
$hits++;
}
// Jeżeli ip było już zapisane...
if ($line==$ipadd)
{
$addip = "FALSE";
}
}
fclose($fp);

// jeżeli nie ma zapisane ip w pliku...
if ($addip == "TRUE")
{
$fp = fopen($file,"a");
fwrite($fp, "\n");
fwrite($fp, $hits);
fwrite($fp, ') ip: ' );
fwrite($fp, $ipadd );
fwrite($fp,  ' - time: ' );
fwrite($fp, $czas );
fwrite($fp,  ' <br> ' );
fclose($fp);
$hits++;
}

// Wyświetlanie ilości odwiedzin unikalnych
echo $hits;
?>

 

Podobne pytania

0 głosów
1 odpowiedź 338 wizyt
pytanie zadane 25 lipca 2018 w C i C++ przez MatZyN Początkujący (350 p.)
0 głosów
2 odpowiedzi 816 wizyt
pytanie zadane 22 lipca 2015 w PHP przez DL TD Nałogowiec (36,710 p.)
0 głosów
3 odpowiedzi 1,106 wizyt
pytanie zadane 21 lipca 2015 w C i C++ przez Avernis Nałogowiec (27,400 p.)

93,469 zapytań

142,404 odpowiedzi

322,712 komentarzy

62,852 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...