2010-10-07 41 views
13

Bu kod ile karıştırıldım:PHP: fopen() İzin reddedildi

fopen('test.txt','a+'); 
xzxx xzxx xzxx xzxx xzxx xzxx xzxx xzxx xzxx xzxx xzxx xzxx xzxx xzxx xzxx xzx

problem nerede?

Çok teşekkürler! Sorunu buldum, FC13 kullanıyorum, çünkü SELinux'un koruması nedeniyle, bazı eylemler reddedildi. Sadece korumanın kurtulmasına ihtiyacım var.

+4

de içerikleri hakkında daha fazla bulabilirsiniz: Bu kullanarak çözülebilir? – SirDarius

+3

ayrıca dosyanın bulunduğu dizinin izinlerini de kontrol ettiniz mi? –

+1

php 'jt' kullanıcısı olarak mı çalışıyor? Açmak istediğiniz dosya başka bir kullanıcıya aitse, bu da bir sorun olabilir. – methode

cevap

5

dosyalarını açmaya çalışırken büyük olasılıkla hep sorunlara neden başka bir dizine

+2

+1 Ve dosya_exists de kontrol düşünün! – Fenton

13

4

Yollar içinde bakıyor

fopen('test.txt','a+'); 

olarak

fopen('/path/to/file/test.txt','a+'); 

deneyin. Dosyaları açmaya çalışırken herhangi bir sorun yaşamanın kolay bir yolu, içinde bulunduğunuz dizini ve çağrı yaptığınız yeri kontrol etmektir.

echo getcwd(); 

Basit bir PHP sayfası oluşturun ve arama yapmak için geçerli dizini yazdırın. PHP sayfasını dosya ile aynı dizine bırakın ve size klasörün doğru yolunu söyleyin ve ardından /filename.xxx dosyasını ekleyin.

chcon httpd_user_content_t test.txt 

... Sorunu gidermek için: Bu kullanım, olmazsa ... httpd_user_content_t

:

4

Kontrol dosyasının SELinux'un bağlam modu için ayarlanmış olduğundan emin olmak için.

6

PHP kullanarak sunucuda bir dosya yazmaya çalıştığınızda "aynı anda" stream stream. Izni verilmemiş "hatasıyla aynı hatayı alıyordum. Hatayı düzeltmek için her şeyi internette denedim. Sunucudaki dosyaların, dizinlerin ve alt dizinlerin sahipliğini "apache" olarak değiştirdim, tüm dosyalar, dizinler, alt dizinler üzerinde "chmod 777" yaptım, "restorecon -R" çalıştırdım, "chcon unconfined_u: object_r: httpd_user_content_t: s0 "tüm dosyalarda, ancak çalışılan tek şey SELinux'u tamamen kapatıyor.

Sonunda sorunu çözdüm. Problem, SELinux tarafından kullanılan boole parametrelerinde yatıyordu. httpd ile ilgili tüm booleanların bir listesini almak için aşağıdaki komutu gerçekleştirdim.

$ getsebool -a | grep httpd

Bu, yaklaşık 36 parametrenin bir listesini verdi.

"Botayı açamadı. Izin reddedildi" hatası giderilene kadar setbool komutunu kullanarak her boolean'ı ağrılı bir şekilde açtım ve açtım.

httpd_unified boolean'ı "on" açtığımda, hata gitti! "Kapat" ı kapattığımda, hata geri geldi!

+0

Çok teşekkür ederim. Tüm dizinlerin ve alt dizinlerin chmod'unu 777'ye dönüştürdüm ve benim için iyi çalıştı! –

5

Bu sorun, SELinux etkinleştirilmiş olmasının bir sonucu da olabilir.

chown -R apache:apache /var/www/html/directory_to_write 
chcon -R -t httpd_sys_content_t /var/www/html/directory_to_write 
chcon -R -t httpd_sys_rw_content_t /var/www/html/directory_to_write 

Sizde NFS monte dizinde bulunan dosya olurdu https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Confined_Services/sect-Managing_Confined_Services-The_Apache_HTTP_Server-Types.html

İlgili konular