Próbuję napisać zapytanie do pliku w celu debugowania. Plik jest w formacie database/execute.php
. Plik, do którego chcę pisać, to database/queries.php
.
Próbuję użyć file_put_contents('queries.txt', $query)
Ale dostaję
file_put_contents (queries.txt) [function.file-put-content]: nie udało się otworzyć strumienia: Odmowa uprawnień
Mam queries.txt
plik chmod'd to 777, jaki może być problem?
php
file-io
file-permissions
Hailwood
źródło
źródło
php.ini
plik w poszukiwaniu czegokolwiek, co mogłoby uniemożliwić dostęp do pliku?Odpowiedzi:
Spróbuj dostosować uprawnienia do katalogu.
z terminala, uruchom
chmod 777 database
(z katalogu zawierającego folder bazy danych)apache i nikt nie będzie miał dostępu do tego katalogu, jeśli jest on poprawnie chmoddowany.
Inną rzeczą do zrobienia jest echo "getcwd ()". Spowoduje to wyświetlenie aktualnego katalogu, a jeśli to nie jest „/something.../database/”, musisz zmienić „query.txt” na pełną ścieżkę do serwera.
źródło
chmod +x /parent/directory
, że @MajidFouladpour dla każdego katalogu nadrzędnego celu.chmod +x /parent/directory
,chmod +x /parent
itp.Druga opcja
jest to, co możesz zrobić
Apache (www-data)
, właścicielem folderusudo chown -R www-data:www-data /var/www
to powinno
file_put_contents
działać teraz. Ale dla większego bezpieczeństwa lepiej również ustaw uprawnienia, jak poniżejfind /var/www -type d -print0 | xargs -0 chmod 0755 # folder find /var/www -type f -print0 | xargs -0 chmod 0644 # files
/var/www
do głównego folderu plików phpźródło
Uświadom sobie, że jest to już dość stare, ale nie ma potrzeby ręcznego zapisywania zapytań do takiego pliku. MySQL ma wbudowaną obsługę logowania, wystarczy ją włączyć w swoim środowisku deweloperskim.
Zapoznaj się z dokumentacją „ogólnego dziennika zapytań”:
http://dev.mysql.com/doc/refman/5.1/en/query-log.html
źródło
Chłopaki, miałem ten problem przez 1 miesiąc i zrobiłem wszystko, ale nie mogłem go naprawić, ale teraz znam rozwiązanie.
Używam współdzielonego hostingu linux, kiedy mój administrator zmienił php na 5.3, otrzymałem wiele błędów w kodzie "file_put_contents". spróbuj przetestować mój plan:
Na swoim hoście utwórz plik taki jak mytest.php, umieść ten kod i zapisz:
<?php mail('Your-EMail','Email-Title','Email-Message'); ?>
Otwórz adres URL „www.twoja-domena.com/mytest.php” jeden raz, a następnie sprawdź pocztę. powinieneś otrzymać e-mail od swojego hosta z informacjami, które wpisałeś w mytest.php, sprawdź nazwę nadawcy. jeśli pochodzi od Nikogo , masz problem z „Odmową uprawnień”, ponieważ coś nie zostało zdefiniowane i jeśli nazwa nadawcy jest taka jak moja id: [email protected], nie masz problemu.
Mój administrator zmienił serwer i ponownie zainstalował hosta. Myślę, że problem został rozwiązany, powiedz administracji hosta, co ci powiedziałem, a może znajdą odpowiedź.
mam nadzieję, że ci to pomoże!
źródło
Wiem, że to bardzo stare pytanie, ale chciałem dodać dobre rozwiązanie z pewnym szczegółowym wyjaśnieniem. Będziesz musiał wykonać dwie instrukcje na systemach podobnych do Ubuntu, a wtedy działa jak urok.
Uprawnienia w Linuksie można przedstawić za pomocą trzech cyfr. Pierwsza cyfra określa uprawnienia właściciela plików. Druga cyfra to uprawnienia określonej grupy użytkowników. Trzecia cyfra określa uprawnienia dla wszystkich użytkowników, którzy nie są właścicielem ani członkiem grupy.
Serwer WWW ma działać z identyfikatorem będącym członkiem grupy. Serwer sieciowy nie powinien nigdy działać z tym samym identyfikatorem, co właściciel plików i katalogów. W Ubuntu uruchamia apache pod identyfikatorem www-data. Ten identyfikator powinien należeć do grupy, dla której określono uprawnienia.
Aby nadać katalogowi, w którym chcesz zmienić zawartość plików, odpowiednie uprawnienia wykonaj polecenie:
find %DIR% -type d -exec chmod 770 {} \;
W przypadku PO oznaczałoby to, że uprawnienia do katalogu% ROOT% / database powinny zostać odpowiednio zmienione. Dlatego ważne jest, aby w tym katalogu nie znajdować się pliki, które nigdy nie powinny być zmieniane ani usuwane. Dlatego najlepszą praktyką jest utworzenie oddzielnego katalogu dla plików, których zawartość musi zostać zmieniona.
Uprawnienia do odczytu (4) dla katalogu oznaczają możliwość gromadzenia wszystkich plików i katalogów wraz z ich metadanymi w katalogu. Uprawnienia do zapisu (2) pozwalają na zmianę zawartości katalogu. Oznacza to dodawanie i usuwanie plików, zmianę uprawnień itp. Uprawnienie do wykonywania (1) oznacza, że masz prawo wejść do tego katalogu. Bez tego ostatniego nie można zagłębić się w katalog. Serwer WWW potrzebuje uprawnień do odczytu, zapisu i wykonywania, gdy zawartość pliku powinna zostać zmieniona. Dlatego grupa potrzebuje cyfry 7.
Drugie stwierdzenie dotyczy PO:
find %DOCUMENT_ROOT%/database -type f -exec chmod 760 {} \;
Umiejętność odczytu i zapisu dokumentu jest wymagana, ale nie jest wymagana do wykonania pliku. 7 jest przyznawane właścicielowi plików, 6 - grupie. Serwer WWW nie musi mieć uprawnień do wykonania pliku, aby zmienić jego zawartość. Te uprawnienia do zapisu należy nadawać tylko plikom w tym katalogu.
Wszystkim innym użytkownikom nie należy nadawać żadnych uprawnień.
Dla katalogów, które nie wymagają zmiany swoich plików, wystarczające są uprawnienia grupowe o wartości 5. Dokumentacja dotycząca uprawnień i kilka przykładów:
https://wiki.debian.org/Permissions
https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions
http://www.linux.org/threads/file-permissions-chmod.4094/
źródło
Zbieranie informacji z tego linku stackoverflow-zapisywanie obrazu nie działa z chmod 777 i od użytkownika azerafati i Loek Bergman
jeśli zajrzysz do pliku / etc / apache / envvars, zobaczysz coś takiego:
Apache działa pod nazwą użytkownika „www-data”
„0755” oznacza, że właściciel pliku może czytać / zapisywać / wykonywać, ale grupa i inni użytkownicy nie mogą pisać. więc w terminalu ur, przejdź do folderu zawierającego folder „images”. następnie wpisz:
find images -type d -exec chmod 0755 {} \; find images -type f -exec chmod 0755 {} \; sudo chown -R www-data:www-data images
musisz najpierw zmienić uprawnienia, zanim zmienisz właściciela. wprowadź swoje hasło po wyświetleniu monitu. spowoduje to, że „www-data” stanie się właścicielem folderu obrazów.
Twoje przesyłanie powinno teraz działać.
źródło
Dla każdego, kto używa Ubuntu i otrzymuje ten błąd podczas lokalnego ładowania strony, ale nie w usłudze hostingowej,
Właśnie to naprawiłem, otwierając nautilus (
sudo nautilus
) i klikając prawym przyciskiem myszy plik, który próbujesz otworzyć, kliknij właściwości> Ustawienia> i daj odczyt i zapis wszystkim innymźródło
miał ten sam problem; moim problemem był selinux został ustawiony na egzekwowanie.
Ciągle otrzymywałem błąd „nie udało się otworzyć strumienia: odmowa uprawnień” nawet po podkodowaniu do 777 i upewnieniu się, że wszystkie foldery nadrzędne mają uprawnienia do wykonywania dla użytkownika Apache. Okazuje się, że moim problemem było to, że selinux został ustawiony na wymuszanie (jestem na centos7), to jest devbox, więc go wyłączyłem.
źródło
Można to rozwiązać, wykonując następujące czynności:
1. $ php artisan cache:clear 2. $ sudo chmod -R 777 storage 3. $ composer dump-autoload
Mam nadzieję, że to pomoże
źródło
Jeśli pobierasz z gita z lokalnego na serwer, czasami będziesz musiał wyczyścić pamięć podręczną ze względu na pliki widoku, które są przesyłane z nim / lub inne pliki w pamięci podręcznej.
Czasami może to po prostu działać, jeśli aplikacja działała przed ściągnięciem git
źródło
to może pomóc. U mnie to zadziałało. spróbuj w terminalu
setenforce 0
źródło
Istnieją 2 sposoby rozwiązania tego problemu
1. użyj
chmod 777 path-to-your-directory
.jeśli to nie zadziała,
2. podaj po prostu pełną ścieżkę do pliku
query.txt
.źródło
Tutaj rozwiązanie. Aby skopiować obraz z adresu URL. ten adres URL:
http://url/img.jpg
$image_Url=file_get_contents('http://url/img.jpg');
utwórz żądaną ścieżkę zakończ nazwę za pomocą
.jpg
$file_destino_path="imagenes/my_image.jpg"; file_put_contents($file_destino_path, $image_Url)
źródło
Ponadto, jak wspomniano
file_put_contents man page
wphp.net
, uważaj na problemy z nazwami.file_put_contents($dir."/file.txt", "hello");
może nie działać (nawet jeśli jest poprawna w składni), ale
file_put_contents("$dir/file.txt", "hello");
Pracuje. Doświadczyłem tego na różnych serwerach z zainstalowanym php.
źródło
$dir."/file.txt"
jest funkcjonalnie równoważne"$dir/file.txt"
we wszystkich przypadkach, przy założeniu, że$dir
jest łańcuchem. Ponadto, jak twierdzi Kivanc, takie zachowanie nie jest udokumentowane na php.net.