2013-05-04 49 views
5

tôi cố gắng tạo thư mục mới sử dụng PHP localhost/PhpProject3/create.php:PHP không tạo ra các thư mục mkdir()

<?php mkdir('newdir', 0777); ?> 

nhưng mã này không làm điều đó. Nó cũng không hoạt động:

<?php mkdir('/var/www/PhpProject3/newdir',0777); ?> 

Tôi đã cài đặt LAMP. Tôi nghĩ rằng vấn đề là trong các thiết lập (có thể chmod?) Bởi vì PHP script hoạt động. Ví dụ: tôi tạo test.php đơn giản:

<?php echo 'Great'; ?> 

và chạy nó: localhost/PhpProject3/test.php kết quả là Tuyệt vời.

Tôi sử dụng Netbeans. Đây là các tệp:/var/www/PhpProject3. tôi chạy nó: localhost/PhpProject3/... Nội dung của/etc/apache2/sites-available/default:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www 
    <Directory /> 
     Options FollowSymLinks 
     AllowOverride None 
    </Directory> 
    <Directory /var/www/> 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride None 
     Order allow,deny 
     allow from all 
    </Directory> 

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
    <Directory "/usr/lib/cgi-bin"> 
     AllowOverride None 
     Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
     Order allow,deny 
     Allow from all 
    </Directory> 

    ErrorLog ${APACHE_LOG_DIR}/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog ${APACHE_LOG_DIR}/access.log combined 

    Alias /doc/ "/usr/share/doc/" 
    <Directory "/usr/share/doc/"> 
     Options Indexes MultiViews FollowSymLinks 
     AllowOverride None 
     Order deny,allow 
     Deny from all 
     Allow from 127.0.0.0/255.0.0.0 ::1/128 
    </Directory> 

</VirtualHost> 

Tôi cũng không thể tạo ra tập tin sử dụng cảm ứng().

Có ai có thể giúp tôi không?

+0

Rất có thể bạn không được phép viết ở đó, máy chủ web thường không được phép ghi vào thư mục hoặc tệp mà nó phục vụ (vì lý do chính đáng). Nếu bạn cần một thư mục có thể ghi, bạn sẽ cần phải thực hiện một chmod để cho phép máy chủ web viết ở đó. Chỉ cần không làm điều đó trên máy chủ gốc, nhưng như cụ thể một thư mục con như bạn có thể. –

Trả lời

9

Máy chủ web của bạn chạy ở đâu? Bạn có thể thấy rằng nếu bạn viết

ps aux 

và hãy xem. Nó có lẽ là người dùng www-data (nếu bạn sử dụng ubuntu).

Sau đó, bạn đã chuyển hướng thư cho người dùng đó và cấp cho người dùng quyền ghi vào thư mục.

chown www-data/var/www/PhpProject3

chmod u + w/var/www/PhpProject3

Một cách khác là thay vì sử dụng quyền của nhóm.

chgrp www-data/var/www/PhpProject3

chmod g w/var/www +/PhpProject3

giả webserver chạy như nhóm www-data.

+0

Người làm việc tốt! Cảm ơn – user1518451

+0

Nó hoạt động nhưng tôi không thể tạo tệp php mới trong Netbeans. Làm thế nào tôi có thể thay đổi chmod để tạo, xóa và chỉnh sửa các tập tin mà không có sự can thiệp của root? – user1518451

+0

Không thể nếu bạn không phải là gốc, bạn có thể làm cho tất cả các thư mục có thể ghi nếu bạn dám, chmod của nó a + w thedir –

2

Khó đoán xem vấn đề thực sự là gì, tôi cho rằng có sự cố hoặc đường dẫn. Bạn nên kiểm tra giá trị trả lại của mkdir():

if(!mkdir()) { 
    print_r(error_get_last()); 
} 

Hơn nữa, bạn nên tìm hiểu các thông báo lỗi cho phép. mkdir() sẽ kích hoạt nó nếu nó không thành công. Chúng được tắt theo mặc định vì nó có thể là một nguy cơ bảo mật trong một hệ thống sản xuất. Nhưng khi bạn đang phát triển bạn PHẢI bật chúng. Bạn có thể kích hoạt nó trong php.ini của hệ thống phát triển:

php.ini:

... 
display_errors=1 
... 
log_errors=1 
... 
error_log="/path/to/writable/file" 
... 
error_reporting=E_ALL 

Sau khi sửa đổi php.ini đừng quên khởi động lại máy chủ web.

-2

có một vị trí tạm thời tin trong centos 7 đó là rất khó chịu đôi khi với php đặc biệt là lệnh mkdir

Để vô hiệu hóa hành vi này, bạn có thể đặt PrivateTmp = false trong/usr/lib/systemd/system/httpd .service

sau đó systemctl daemon-tải lại; systemctl restart httpd

HTH.

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