2012-12-17 47 views
10

Tôi có một kịch bản PHP làm việc trước đó là khả năng tạo ra một thư mục với mkdir:PHP không thể tạo một thư mục với mkdir

$webfolder = "/var/www/html/images/user"; 
mkdir($webfolder, 0770); 

tôi đã thực hiện một số thay đổi các thiết lập cho phép của thư mục /var/www/html/images mà bây giờ là :

drwxrwx---. myself apache system_u:object_r:httpd_sys_content_t:s0 images 

Tôi nghĩ thư mục này trước đây thuộc sở hữu của apache. Nhưng vì apache có đầy đủ đặc quyền đọc, viết và thực thi như một nhóm người dùng, tôi tự hỏi tại sao nó không thể tạo thư mục bên trong. Sử dụng mkdir tạo ra giá trị boolean false.

Sự cố là do quyền sở hữu thư mục hoặc có một số lý do khác không? Lưu ý rằng tôi đang sử dụng PHP phiên bản 5.4.

Lỗi Log thêm:

[Mon 17 tháng 12 11:12:34 2012] [lỗi] [khách hàng 127.0.0.1] PHP Warning: mkdir(): Permission denied trong/var/www/html/upload trên dòng 33, referer: https://mywebsite.com/referer

+1

Thư mục '/ var/www/html/images/user' có tồn tại không? Nếu có, với quyền nào? Và bạn có thể - để thử nghiệm purporses - thay đổi chủ sở hữu của thư mục cha thành 'apache' và thử nếu nó hoạt động sau đó? – hakre

+0

@hakre, SELinux mang lại cho tôi vấn đề. Xem câu trả lời của tôi.Cảm ơn sự kiên nhẫn và thời gian của bạn :) –

Trả lời

26

Câu trả lời là nhìn chằm chằm ngay trước mặt tôi, nhưng tôi bỏ lỡ nó do không quen thuộc của tôi với SELinux.

Loại ngữ cảnh SELinux phải được đặt là httpd_sys_content_rw_t thay vì httpd_sys_content_t để thư mục có thể đọc và ghi được đối với apache. Việc thay đổi ngữ cảnh đệ quy được thực hiện bằng lệnh sau:

# chcon -R -t httpd_sys_content_rw_t /var/www/html/images 

Tốt đau buồn. Hy vọng nó sẽ giúp những người khác đi qua này.

+0

Hi 'm có cùng một vấn đề ở đây .. với một dự án tôi đang cố gắng để tạo ra trong CodeIgnter và phát triển trong Ubuntu 14.14 Lts .. Bạn có thể vui lòng giải thích cho tôi nhiều hơn mặc dù các bước tôi cần phải làm gì để sửa lỗi này ??? Để cung cấp cho bạn một số thông tin bổ sung: đường dẫn tuyệt đối là '/ opt/lampp/htdocs/www/my-app/công khai/tải lên' .. Về cơ bản những gì tôi đang cố gắng thực hiện là mọi người dùng đã đăng nhập để tải tệp lên bên trong video tải lên thư mục và cũng tạo ra các thư mục album (điều này sẽ được thực hiện với php) để lưu trữ hình ảnh .. – Lykos

+0

Bạn có thể xem các chủ đề mà tôi đã tạo để biết thêm thông tin http://stackoverflow.com/questions/32861261/codeigniter-message-mkdir- permission-denied-on-ubuntu, http://forum.codeigniter.com/thread-63136.html, http://askubuntu.com/questions/679844/mkdir-permission-denied-to-create-folders-with- php – Lykos

+0

lệnh này bạn đã nói sẽ khắc phục sự cố của tôi trong trường hợp của tôi? – Lykos

0

Trên máy ảo CentOS7, với PHP5.4.16/Apache 2.4.6/mariadb 5.5.44, thư mục mẫu thông minh không thể ghi được để tạo tệp mẫu đã biên dịch và đưa ra lỗi dưới đây (trong/var/log/httpd/error_log):

[Thu Mar 31 12:36:08.201383 2016] [:error] [pid 13094] [client 192.168.212.65:52204] PHP Fatal error: Smarty error: unable to write to $compile_dir '/var/www/html/app1/templates_c'. Be sure $compile_dir is writable by the web server user. in /var/www/html/app1/libs/smarty/Smarty.class.php on line 1093 

do đó ứng dụng PHP đang hiển thị màn hình trống.

chmod 777 templates_c cũng không hoạt động; nhưng theo đề xuất của @Question Overflow, sự cho phép trên web root trên máy ảo này đã giải quyết được vấn đề.

tôi phải thực hiện:

[[email protected] html]# chcon -R -t httpd_sys_content_rw_t /var/www/html 

tất nhiên, bộ nhớ cache templates_c & nên được sở hữu bởi người sử dụng apache:

drwxr-xr-x. 2 apache apache  6 Mar 31 12:56 templates_c 
drwxr-xr-x. 2 apache apache  6 Mar 31 12:56 cache 

Sau khi trải qua hơn nửa ngày, đi qua này. Cảm ơn

Các vấn đề liên quan