2010-06-04 27 views
6

Điều này có liên quan đến việc tải lên phương tiện trong Wordpress. Mỗi lần WP tạo một thư mục để tải lên mới (nó tổ chức tải lên theo năm và tháng: yyyy/mm), nó tạo ra nó với người dùng và nhóm apache: apache ', với quyền truy cập đầy đủ vào tất cả (777 hoặc drwxrwxrwx Tuy nhiên, sau đó, WP không thể tạo thư mục trong thư mục đó (ví dụ: mkdir 2011 thành công, nhưng mkdir 2011/01 không thành công) .Tuy nhiên, tải lên không thể chuyển vào các thư mục mới được tạo này mặc dù quyền là 777 (rwxrwxrwx)Không thể tải lên phương tiện thông qua trình tải lên Wordpress

Mỗi tháng một lần, tôi phải chown thư mục mới được tạo giống với người dùng: nhóm như phần còn lại của Tập tài liệu. Một khi tôi làm điều đó, tải lên các công trình tốt (mà không có ý nghĩa với tôi Phần thực sự bực bội là vấn đề này không tồn tại trong cài đặt WP khác trên các tên miền khác trên cùng một máy chủ ..

* Tôi đã không chắc chắn nếu điều này nên ở đây hoặc trên serverfault


Edit:. các chứa thư mục /.../httpdocs/blog/wp-content/uploads có quyền sở hữu đúng

drwxrwxrwx 5 myuser psaserv 4096 Jun 3 18:38 uploads 

đây là một môi trường Plesk/CentOS được tổ chức bởi Media Temple (dv)

.

Tôi đã viết kịch bản thử nghiệm sau đây để mô phỏng các vấn đề

<pre><?php 

$d = "d" . mt_rand(100, 500); 

var_dump(
    get_current_user(), 
    $d, 
    mkdir($d), 
    chmod($d, 0777), 
    mkdir("$d/$d"), 
    chmod("$d/$d", 0777), 
    fileowner($d), 
    getmyuid() 
); 

Kịch bản luôn luôn tạo ra các thư mục đầu tiên mkdir($d) thành công. Trên miền A, trong đó vấn đề WP là, nó không thể tạo thư mục lồng nhau mkdir("$d/$d"). Tuy nhiên, trên miền B, cả hai thư mục đều được tạo thành công.

Tôi đang chạy mỗi kịch bản tại /var/www/vhosts/domainA/httpdocs/tmp/t.php/var/www/vhosts/domainB/httpdocs/tmp/t.php tương ứng tôi đã kiểm tra các điều khoản trên tmp, httpdocs, và domain[AB] và họ đều giống nhau cho mỗi con đường. Điều duy nhất khác với người dùng.

+0

Tôi gặp sự cố này một lần với WordPress trên máy chủ Plesk, không bao giờ tìm ra cách khắc phục và kết thúc di chuyển nó sang máy chủ lưu trữ khác. –

+0

Chết tiệt, tôi ở cùng một chiếc thuyền. Đó không phải là rất hứa hẹn. –

Trả lời

2

Hãy thử đi tới trang cài đặt linh tinh của bạn (hoặc các phương tiện tùy thuộc vào phiên bản của bạn) và chắc chắn rằng thư mục upload vẫn là wp-content/uploads.

Nếu bạn cần. cũng đặt url đầy đủ.

Ngoài ra, là giải pháp cuối cùng, hãy tắt tùy chọn sắp xếp chúng thành các thư mục để WordPress không cần phải tạo thư mục.

+0

Giải pháp cuối cùng của bạn không hoạt động, tuy nhiên, nó không giải quyết được vấn đề cơ bản: (Nếu tôi không nhận được câu trả lời cho hiệu ứng đó, tôi chắc chắn sẽ trao cho bạn tiền thưởng. –

+0

Một số cửa hàng nhỏ ngẫu nhiên cho một khách hàng Tôi đã phải vật lộn với vấn đề sau khi phát hành với chủ nhà cho đến khi tôi cuối cùng đã thuyết phục khách hàng chuyển đến chủ nhà của tôi sau 2 năm. Đây có lẽ là chế độ an toàn của PHP.Tôi đã làm một số googling, và thấy một vài khuyến nghị để thiết lập các chủ sở hữu để 'không ai'. Chủ đề này có một loạt các bài viết về nó: http://wordpress.org/support/topic/254069 –

+0

Ồ, tôi giả sử bạn đã thử điều này, nhưng bạn đã đệ quy một cách rõ ràng thiết lập các kịch bản và các thư mục cho cùng một chủ sở hữu? –

1

Kiểm tra bit setuid hoặc setgid trên thư mục phía trên thư mục 2010. ls -l sẽ có s hoặc S trong quyền cho thư mục. Đảm bảo thư mục này có quyền sở hữu chính xác.

+0

Tôi đã thử tập lệnh mẫu có và không có 's' đặt trên thư mục chứa' tmp', nhưng tôi không thể tạo thư mục lồng nhau (xem phần chỉnh sửa của tôi). –

+0

Các thư mục có được tạo với tư cách cùng một người dùng trên cả hai miền không? So sánh cây thư mục tất cả các cách để /. Có thể có vấn đề về quyền hơn nữa lên cây. – BillThor

+0

Tôi so sánh cây thư mục tất cả các con đường lên đến '/ var/www/vhosts' nơi cả hai tên miền đều nằm. Theo như tôi có thể nói, họ đã được cho phép giống hệt nhau. Điều duy nhất khác biệt giữa hai đường dẫn là người dùng. Nhóm này giống nhau cho cả hai đường dẫn (psaserv), nhưng mỗi miền có một người dùng khác nhau (một hạn chế của Plesk). –

1

Hãy cố gắng tạo thư mục đệ quy với mkdir($d, true)

<pre><?php 

$d = "d" . mt_rand(100, 500); 

var_dump(
     array(
       get_current_user(), 
       $d, 
       mkdir($d,true), 
       chmod($d, 0777), 
       mkdir("$d/$d", true), 
       chmod("$d/$d", 0777), 
       fileowner($d), 
       getmyuid() 
      ) 
     ); 
+0

Tôi đã thử nó, nhưng nó không có sự khác biệt. Ngoài ra, đây không phải là cách WP tạo ra các thư mục (cho tải lên ít nhất) và tôi không muốn để ngã ba codebase cho một cái gì đó rất đơn giản. –

1

Tôi đã gặp vấn đề tương tự với Joomla gần đây và giải quyết vấn đề bằng cách thêm myuser vào nhóm apache và thêm apache vào nhóm psaserv.

+0

Điều này có vẻ như nó sẽ hoạt động, nhưng không có súc sắc: / –

1

Một trong các trang web của chúng tôi trên Media Temple DV gặp sự cố này. Tắt chế độ Safe Mode của PHP đã giải quyết nó.Các thư mục vẫn được tạo ra như apache: apache, nhưng các tập tin media được cho phép trong đó.

1

Một điều đã xảy ra với tôi - WP sẽ cho bạn biết rằng nó nĐể có thể sao chép tập tin vào /wp-content/upload ngay cả khi tất cả các điều khoản là đúng .... nếu

upload_max_filesize

trong php.ini là quá nhỏ (nói 2M và bạn cố gắng tải lên tập tin 3,5MB)!

Hy vọng rằng sẽ giúp tất cả những người có quyền phù hợp nhưng vẫn không thể tải lên!

1

Bạn không cần 777 trên các thư mục của mình, tối đa 775 là đủ. Chỉ cần chắc chắn rằng nó được đặt trên thư mục tải lên với 755 cho tất cả các thư mục khác ở trên.

Ngoài ra, bạn có thể thử thuật nó với www-data, đôi khi giúp khi người dùng ftp của bạn đăng nhập khi thay đổi quyền mỗi tháng một lần không có đủ cấp truy cập và sở hữu các thư mục đó người dùng ngăn máy chủ không thể ghi vào chúng.

Cuối cùng, như ai đó đã chỉ ra ở trên, bạn có thể cần phải lên giới hạn kích thước upload cùng với việc đảm bảo các thiết lập php.ini upload file liên quan khác là chính xác:

http://php.net/manual/en/ini.core.php

http://kb.mediatemple.net/questions/137/How+can+I+edit+the+php.ini+file%3F#dv

3

Một giải pháp là sử dụng FastCgi. Điều này làm cho PHP chạy như người dùng sở hữu trang web. Các tệp và thư mục mới sẽ là cùng một người dùng và nhóm. Điều này sẽ giải quyết vấn đề của bạn.

Có một hình phạt về hiệu suất đối với FastCgi nhưng bạn nhận được một số bảo mật bổ sung vì nó hạn chế php. Nếu bạn đang lưu trữ nhiều trang web với nhiều người dùng thì đây có thể là một ý tưởng hay.

1

Một nguyên nhân phổ biến, thường bị bỏ qua, là hạn ngạch đĩa, nghĩa là bạn đã hết dung lượng đĩa.

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