2015-02-28 27 views
5

Tôi biết đây là lỗi phổ biến với nhiều chuỗi nhưng tôi mệt mỏi vì tìm kiếm và tôi vẫn chưa giải quyết được. Khi tôi cố gắng để chạy các chức năng file_put_contents tôi nhận được lỗi sau:Không thể mở luồng trên file_put_contents bằng PHP trên CentOS 7

Warning: file_put_contents(test.txt): failed to open stream: Permission denied in /var/www/html/nurses/adminWriter.php on line 29 

Tôi đã thực hiện câu trả lời phổ biến nhất, thay đổi các điều khoản của y tá thư mục và test.txt tập tin đến 777. Điều đó không hiệu quả.

Tôi hiện đang cài đặt mới máy chủ CentOS 7 mới nhất.

tôi đã tìm thấy rằng nếu tôi chạy script php thông qua giao diện điều khiển:

# php /var/www/html/nurses/adminWriter.php 

Nó hoạt động tốt, tôi nhận được lỗi chỉ khi chạy nó thông qua trình duyệt, nhưng tôi thực sự cần phải chạy nó cách này.

Trân trọng!

+1

Khi bạn chạy tập lệnh php thông qua apache, nó chạy như (bất kỳ người dùng nào bạn chỉ định), thường là "apache". Khi bạn chạy một tập lệnh php thông qua giao diện điều khiển, bạn đang chạy nó như bất cứ điều gì bạn đang đăng nhập như. Đảm bảo người dùng "apache" (hoặc bất kỳ điều gì) có thể truy cập tệp đó (bao gồm bất kỳ thư mục cha nào). Ngoài ra, bạn có thể thử sử dụng một đường dẫn tuyệt đối để test.txt - bạn có thể đang cố gắng viết một nơi nào đó mà bạn không mong đợi. – jedwards

+0

Bạn đã bỏ qua báo giá theo mục đích? Hãy thử rằng: 'file_put_contents (__ DIR__. '/test.txt');' – alfallouji

+0

Bạn có nghĩa là làm một cái gì đó như: # chown -R apache: apache/var/www/html/y tá/ – danielnovais92

Trả lời

4

Ok, tôi thấy vấn đề này: selinux

Dưới đây là giải pháp: http://kb.sp.parallels.com/en/11142

Trong trường hợp trang đi xuống:

Triệu chứng

Sau khi bạn thay đổi thư mục mặc định để lưu trữ nội dung trang web (ví dụ: "/ home"), bạn không thể truy cập nội dung của các tên miền phụ và các trang web bổ sung trên Web.

Nguyên nhân

Vấn đề này xảy ra nếu SELinux công trình trong "Enforcement" chế độ. Trong chế độ này, các thư mục webroot cho các trang web và tên miền phụ bên trong chúng có các quyền khác nhau và máy chủ web của bạn không thể truy cập chúng. Chạy lệnh này:

# getenforce 

Sản lượng nên là: Thi hành

Nghị quyết

Disable SELinux hỗ trợ: Mở tập tin /etc/selinux/config trong bất kỳ trình soạn và tìm thấy hàng này:

SELINUX=<value> 

Thay đổi nó để:

SELINUX=disabled 

Nếu bạn không thể tìm thấy tập tin này, mở tập tin/boot/grub/grub.conf trong bất kỳ trình soạn và thêm các tham số selinux = 0 vào Grub Boot Loader:

title SE-Linux Test System 
root (hd0,0) 
kernel /boot/vmlinuz-2.4.20-selinux-XXXXXXXXXX ro root=/dev/hda1 nousb selinux=0 
#initrd /boot/initrd-2.4.20-selinux-XXXXXXXXXX.img 

Khởi động lại máy chủ để áp dụng các thay đổi. Nếu bạn không muốn khởi động lại, chạy lệnh này:

# setenforce 0 
+1

Tắt SELinux không được khuyến cáo. Có những cách tốt hơn để làm điều đó. –

+1

@Ilia Rostovtsev Tôi đã gặp phải vấn đề tương tự này và vô hiệu hóa SELinux đã khắc phục nó, cách nào khác tốt hơn để thực hiện nó mà không tắt SELinux? – technomage

9
chcon -Rv --type=httpd_sys_rw_content_t /dir 

Điều này có thể giúp đỡ, chứ không phải tắt selinux.

+1

Bạn có thể giải thích điều này không? – Mike

+0

cảm ơn 'aureport -a' trước khi chạy chcon {{{ 24. 09-10-2017 16:25:31 httpd system_u: system_r: httpd_t: s0 2 tệp đã đọc unconfined_u: object_r: user_home_t: s0 bị từ chối 923 25. 09-10-2017 16:26:42 httpd system_u: system_r: httpd_t: s0 2 tệp đã đọc unconfined_u: object_r: user_home_t: s0 bị từ chối 924 26. 09-10-2017 16:29:38 httpd system_u: system_r: httpd_t: s0 2 tập tin đọc unconfined_u: object_r: user_home_t: s0 bị từ chối 925 }}} –

+0

Điều này làm việc cho tôi. U đã tiết kiệm thời gian của tôi sau khi làm việc nhiều giờ. sử dụng sudo chcon -Rv --type = httpd_sys_rw_content_t/dir – Vara

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