O 777 izinlere sahip olsa bile PHP dosyasına yazamıyor

5 Cevap php

Im aynı klasörde bulunan bir dosya için bir php dosya yazma yapmaya çalışıyorum. Php dosya ve dosya hem de onun kendi izinleri 'w' ya da modu 'w +' ile 777 (onun bir linux server) yanı sıra ben Fopen denilen zaman onlar (inç ikamet klasöre) ayarlanmış olması için yazmaya çalışıyorum, fonksiyon sadece yanlış döndürür. Onun benim okulun web sunucusu üzerinde, bu yüzden ben apache gibi aynı kullanıcıya dosyanın sahibini değiştirmek için root erişimi alabilirsiniz yolu yoktur. Ne yanlış biliyor mu?

Update: As a test, I was using this code:

$handle = fopen("test.txt", 'w');
if($handle === FALSE)
    echo "\nfailed";
else
    echo "\nsuccess";
fclose($handle);

Etkin hata raporlama ile şimdi çıktı:

Warning: fopen(test.txt) [function.fopen]: failed to open stream: Permission denied in /<snip>/public_html/test.php on line 58
failed
Warning: fclose(): supplied argument is not a valid stream resource in /<snip>/public_html/test.php on line 63

Yukarıda ben metin dosyasının izinlerini denetler) fonksiyonu (fileperms için php web sitesinden kopyalanmış, ve raporlama-rwxrwxrwx bazı kod

İlgili dosya ls-al çıkışı

ls -al *test*
-rwxrwxrwx   1 mag5     30          1475 Dec  9 00:02 test.php*
-rwxrwxrwx   1 mag5     30             8 Dec  8 14:54 test.txt*

Ayrıca Im bu konularda emin, ama benim okul Andrew Dosya sistemi denilen bir şey kullanır (http://en.wikipedia.org/wiki/Andrew%5FFile%5FSystem).

5 Cevap

Telanor, AFS çok büyük bir ipucudur.

AFS (Andrew File System) geleneksel unix dosya sistemlerinin ötesinde dizin izinleri bütün bir seviyeye sahiptir. Eğer dizindeki dosyalara erişmek için yeteneğine sahip emin olmak için dizinde AFS izinlerini denetleyin. Ayrıca o olsun izinleri olmayabilir, ancak web sunucusu izinleri (veya daha doğrusu kullanıcı'kimliği o altında çalışıyor). Ben bu yüzden dizin izinlerini denetlemek için hazırlıksız komutları bilmiyorum AFS kullanılan bu yana uzun bir zaman oldu.

Yerine bunu:

$fh = fopen($filename, "a");

Ben sorun directory için doğru izinlere sahip değilsiniz olduğunu düşünün. Bir dosyayı silmek çalıştığınızda dizinde yazma izni gerekiyor ve "w" yapacak.

Eğer / kesecek dosyasını silin, dizin izni değiştirmeniz gerekirse Alternatif, bu yüzden yazma izinleri var.

Muhtemelen php fazla dosyanın sahibi olarak aynı kullanıcı olarak çalışmıyor. (Sadece aynı dizinde bir rasgele adlandırılmış dosyayı olun) php kullanarak dizinde yeni bir dosya oluşturarak denediniz mi?

Bu başarısız olabilecek bir kaç nedeni var. Etrafında bilgilere dayanarak, bu dosya izinleri ile ilgili bir sorun değildir. , Ilk ve belki büyük olasılıkla web sunucusu salt okunur tüm dosya erişimi yapılandırma çalışıyor olmasıdır. NFS salt okunur monte çünkü, ya da PHP veya sunucu yazma önlemek için böyle bir şekilde yapılandırılmış olduğundan bu olabilir.

Ayrıca, 777 olmak üzere bir dosya atmadı lütfen. Hatta 666 yeterince tehlikeli. Bu bir okul sunucusu gibi paylaşılan bir ortamda özellikle doğrudur.

Bu noktada, sunucu ortamı üzerinde sınırlı kontrole sahip varsayarak, daha fazla bilgi için yöneticinizle sormalısınız.

It is like MadCoder sais. From the AFS Docs: "AFS ACLs work in conjunction with the standard Unix "owner" permissions. Only the owner permissions have an effect on AFS file access; Unix permissions for "group" and "other" do not affect AFS file access.

Bu kurallar geçerlidir. Uygun AFS izinleri ile yapabilirsiniz Bir kullanıcı:

read a file only if the UNIX "owner read" mode is set. write to a file only if the UNIX owner "read" and "write" modes are set. execute a file only if the UNIX owner "read" and "execute" modes are set."

AFS izinlerini ayarlamak için, "fs setacl" komutunu kullanmanız gerekir.