是什麼導致上傳時 wordpress 文件為空錯誤?
當我嘗試在 wordpress 中上傳任何內容時,我似乎無法弄清楚為什麼會得到以下資訊……對於媒體上傳和 wordpress 導入 xml:
“抱歉,出現錯誤。文件為空。請上傳更多內容。此錯誤也可能是由 php.ini 中禁用上傳或 post_max_size >定義為小於 php.ini 中的 upload_max_filesize 引起的。 "
似乎很少有關於如何通過 nginx/php-fpm 線上解決此問題…其中大部分是關於 php.ini max configs 或 chmod,其中…在我的設置中
post_max_size
足夠大以及(以及超時)……並且 chmod/chown 似乎對於使用單獨的 php 池是正確的。也許有人可以對此做出正面或反面?upload_max_filesize``/etc/php5/fpm/php.ini
這是我的設置:
- Cloudflare(已關閉)到浮動 IP
- Digitalocean 浮動 IP 到 droplet
- Droplet 是帶有 nginx 的 Ubuntu 14.04,使用 php-fpm 並為每個 wordpress ms 安裝創建池(x4 atm)
- SSL with Let’s encrypt 用於每個 wpms 安裝
- Chmod 755 用於站點根目錄中的所有 wpms 目錄
- chmod 644 用於每個站點根目錄中的所有 wpms 文件
- chmod 660 用於 wp-config.php
- chown 每個 php5-fpm 池使用者在他們自己的站點根目錄中的所有文件/目錄,例如:
chown -R example1:example1 /home/example1/*
- Wordpress 是其 nginx conf 根目錄下的一個目錄。例如
/home/example1/app/wordpress_files_here
- php.ini 已使用定義的目錄(/home/tmp/)啟用上傳
使用者不在 www-data 組或 sudo 組中,我讀到這樣做是一種安全風險,但即便如此,我還是暫時嘗試將它們添加到 www-data 組以查看 wordpress 上傳是否可以工作……它沒有。我也嘗試過 chown example1:www-data 所有權,但沒有用。我也試過 chmod 777 上傳文件夾,沒有用。
錯誤日誌有以下內容:在 wpms-error.log 中(這對我來說也沒有意義)
2016/05/20 01:12:00 [crit] 1584#0: *1251 open() "/home/example1/example1.com-access.log" failed (13: Permission denied) while logging request, client: [my IP address], server: example1.com, request: "POST /wp-admin/admin-ajax.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm-example1.sock", host: "example1.com", referrer: "https://example1.com/wp-admin/admin.php?import=wordpress&step=1&_wpnonce=dad4d82487"
在這些站點的 nginx conf 文件中,我有:
access_log /home/example1/$host-access.log;
在 nginx.conf 中啟用了訪問日誌(即使不推薦),但每個站點的訪問日誌並未寫入其站點根目錄。
所以…在嘗試了我在網上閱讀的所有內容之後…我什至還沒有找出根本問題是什麼…因為僅文件權限似乎不是嗎?.. 是嗎???
以下(將使用者名更改為 example1 等後)是
ps aux | grep php
結果:root 993 0.0 0.2 266688 11396 ? Ss May18 0:10 php-fpm: master process (/etc/php5/fpm/php-fpm.conf) example1 1003 0.0 1.1 302568 45856 ? S May18 0:32 php-fpm: pool example1 example1 1004 0.0 1.1 304620 47808 ? S May18 0:31 php-fpm: pool example1 example2 1005 0.0 1.1 304360 47648 ? S May18 0:30 php-fpm: pool example2 example2 1007 0.0 1.1 302308 45956 ? S May18 0:30 php-fpm: pool example2 example3 1008 0.0 0.1 268640 7704 ? S May18 0:00 php-fpm: pool example3 example3 1009 0.0 0.1 268640 7744 ? S May18 0:00 php-fpm: pool example3 www-data 1010 0.0 0.1 266680 7560 ? S May18 0:00 php-fpm: pool www www-data 1011 0.0 0.1 266680 7564 ? S May18 0:00 php-fpm: pool www example4 1013 0.0 0.9 296016 39704 ? S May18 1:24 php-fpm: pool example4 example4 1014 0.0 1.3 310952 55024 ? S May18 1:23 php-fpm: pool example4 example5 1015 0.0 1.0 297352 40940 ? S May18 0:32 php-fpm: pool example5 example5 1016 0.0 1.1 305104 48232 ? R May18 0:32 php-fpm: pool example5 example4 1105 0.0 0.9 296016 39596 ? S May18 1:20 php-fpm: pool example4 example1 1313 0.0 0.9 296284 39884 ? S May18 0:31 php-fpm: pool example1 example2 1317 0.0 1.1 304364 47628 ? S May18 0:29 php-fpm: pool example2 example5 1332 0.0 0.9 296880 39056 ? S May18 0:29 php-fpm: pool example5 example3 3727 0.0 0.0 11744 932 pts/1 S+ 18:42 0:00 grep --color=auto php
上面的 example3 不是 wpms 站點,它只是一個空的 root atm,並且該使用者也在 sudo 組中,並且擁有自己的 ssh 登錄名。我不知道這是否相關。
這對我來說聽起來像是一個權限問題,可能是圍繞組。我將在本教程中詳細介紹,但要點如下
首先是我用來重置權限的腳本
chown -R tim:www-data * find /var/www/wordpress -type d -exec chmod 755 {} \; find /var/www/wordpress -type f -exec chmod 644 {} \; find /var/www/wordpress/wp-content/uploads -type f -exec chmod 664 {} \; find /var/www/wordpress/wp-content/plugins -type f -exec chmod 664 {} \; find /var/www/wordpress/wp-content/themes -type f -exec chmod 644 {} \; chmod 440 /var/www/wordpress/wp-config.php chmod -R g+s /var/www/wordpress/
以下是我教程的要點——其中的資訊來自 wordpress.org 網站,大部分情況下,我的教程中有參考資料
- 將所有者設置為您之前創建的使用者,並將所有權組設置為 www-data
- 文件夾預設為 755,標準
- 文件預設為所有者可寫,所有人可讀
- 上傳使用者和網路伺服器可寫的文件夾,因此媒體可以由使用者上傳
- 使用者和 Web 伺服器可寫的 Plugins 文件夾,因此可以添加外掛
- 主題文件夾只能由所有者修改