2010-10-31 16 views
5

Aşağıdaki PHP betiği dizini oluşturulamıyor. Ayrıca, dosyayı oluştururken de başarısız olacaktır (dizin zaten mevcut olduğunda).PHP mkdir() ve fopen() çalışmıyor - izin sorunu? umask problemi?

ini_set('error_reporting', E_ALL); 

define('ABSPATH', $_SERVER['DOCUMENT_ROOT']); 
echo ABSPATH . '<br /><br />'; 

$dir_to_make = ABSPATH . '/aaatest'; 
$file_to_make = ABSPATH . '/aaatest/aaatest.txt'; 

echo umask() . '<br />'; 

mkdir($dir_to_make) or die('could not create directory'); 
fopen($file_to_make) or die('could not open/create file'); 

umask'ı() belgesi kökü, (/var/www/blah/websitename.com/httpdocs) ve süreye sahip 18 bir değer iade edilir.

Ben umask() 'ı tam olarak anlamadım, ya da nasıl düzgün kullanacağından emin değilim. Sorun değil mi bilmiyorum, ama olası görünüyor. Umkayı değiştirmeli miyim, dosya/dizin oluşturmalı mıyım? Umask dosyaları/dizinleri değiştirmek/düzenlemek/düzenlemek için ne olmalı? Sunucu farklı yapılandırılmış mı?

+0

php'nin oluşturduğu hata iletisi nedir? html akışına yazdırmıyorsa, sunucu günlüğünde olur. – Lee

+0

PHP Uyarı: mkdir() [function.mkdir]: /var/www/blah/websitename.com/httpdocs/aaa.php adresindeki izin 13 – matthewpavkov

+0

adresinde reddedildi. Aynı sunucuda bu hesabı da eklemeliyim. iyi çalışıyor (dosya yükleme, eklentileri güncelleme, vb) tam bir Wordpress kurulumu. – matthewpavkov

cevap

6

için

fopen($file_to_make) or die('could not open/create file'); 

değiştirmeyi deneyin , PHP süreç dizinine yazma izinleriniz olmalıdır. Genellikle (ama her zaman değil) PHP, web sunucusunun çalıştırdığı aynı kullanıcı olarak çalışır. Bu kullanıcının adı farklı sistemlere göre değişecektir. Ubuntu ve Debian'da, kullanıcı www-data olarak adlandırılır, diğer sistemlerde sadece www veya apache veya apache2 olabilir. Bazı sistemlerde, root olabilir.

PHP'nizin hangi kullanıcı üzerinde çalıştığını, sunucu süper küresel kodunun değerini inceleyerek öğrenebilirsiniz: $_SERVER['USER']. phpinfo(), bu gibi şeylere kolay bir şekilde bakış sağlar. Genellikle, PHP kullanıcısı web sunucusu kullanıcısı ile aynıdır (ancak her zaman değil).

dizin sahipliğini ve izinlerini belirleme tamamen başka bir konudur - hangi işletim sistemini kullandığınıza, sunucu için hangi erişim ve izinlere ve diğer birçok şeye bağlıdır. Bu konuda işaretçiler gerekiyorsa, start at serverfault.com.

İyi şanslar.


[değiştir] Eğer apache olarak koşuyoruz yapıyor ve ardından ... /var/www/blah/mydomain.com/htdocs/ içinde yeni bir dizin oluşturmak çalışıyorsanız Tamam, çalıştırın:

> ls -splad /var/www/blah/mydomain.com/htdocs 

şimdi etsen

:

4 drwxr-xr-x 2 apache apache 4096 2010-07-22 20:54 /var/www/blah/mydomain.com/htdocs/ 

iki ilginç parçalar var: Bir şey gibi görmeyi beklediğinizdrwxr-xr-x, anlamına gelir: d = dizin; rwx = Kullanıcı Oku, Yaz, eXecute; r-x = grup yalnızca Oku ve eXecute; r-x = Herkesin yalnızca Oku ve eXecute var.

ve apache apache - ilki dosya/dizinin sahibi olan kullanıcının adı, ikincisi ise dosyanın/dizinin sahibi olan grubun adıdır.o apache göre gruplandırılmış oluyor rağmen

4 drwxr-xr-x 2 root apache 4096 2010-07-22 20:54 /var/www/blah/mydomain.com/htdocs/ 

it would dizin (apache değil) root ait olduğundan değil eser ve, dizin değil:

yüzden böyle bir şey gördüyse Grup yazılabilir böylece kesmez. Bu senaryoda, yalnızca grup yazma izinleri ekleyebilirsiniz (chmod g+w /var/www/blah/mydomain.com/htdocs) ve gitmekte fayda var.

Bu durumda
4 drw-r-xr-x 2 apache apache 4096 2010-07-22 20:54 /var/www/blah/mydomain.com/htdocs/ 

, mülkiyet Tamam, ama dizin sahibi tarafından yazılabilir değil: görebileceğiniz başka

şey olduğunu. Bunu, chmod u+w /var/www/blah/mydomain.com/htdocs sahibi için yazma izni ekleyerek düzeltebilirsiniz.

başka varyasyonlar var, ama belki bu yardımcı olacaktır.

+0

Evet, apache olarak çalışıyor. – matthewpavkov

+0

tamam, apache'nin – Lee

+0

kullanıcısına özgü bilgiler için son düzenlemeye bakın ve umask önemli değil - varsayılan olarak, oluşturduğunuz dizinlere verilecek izinleri denetler. Ama bir dizin veya dosya oluşturabilip edemeyeceğinizi kontrol etmez. Komut dosyanızı doc-root içindeki dizini oluşturmaya odaklanın. Çalışmaya başladığınızda, dosyanın oluşturulmasını ekleyin. Dizini oluşturabilir ancak dosyayı oluşturamazsanız umask hakkında konuşacağız. ;-) – Lee

2

Fopen'e 2 argüman sağlamalısınız. Belge kökü içinde bir dosya oluşturmak amacıyla

fopen($file_to_make,'w') or die('could not open/create file'); 
+0

Hayır, bu işe yaramıyor. – matthewpavkov

+0

Dizindeki izinleri kontrol edin. – lbedogni