さくらインターネットを利用しています。ある日、画像を含む記事を投稿したり、写真などのメディアをアップロードしようとしたところ、「ディスクに書き込みができない」という謎のエラーメッセージでエラーが出るようになってしまいました。
原因究明
アップロードディレクトリのパーミションは、WordPressのツールメニューにあるサイトヘルスで確認する限りはアップロード可能で問題なし、念のため、さくらインターネットのコントロールパネルで準備されているファイルマネージャーを確認しても問題なしでした。書き込み可能です。

当然、サーバー自体の容量にも十分に空きがあることを確認しています。
さらに調べてみると、上記のファイルマネージャーからは見えないディレクトリ(/var/tmp)に一時ファイルが溜まってしまった場合もアップロードでエラーが出るようです。このディレクトリは10時間から数十時間(または数百時間)で自動削除されるようなのですが、そこまでは待っていられません。
実はtmpディレクトリがいっぱいになってしまう原因に心当たりがあります。WordPressの上で運営しているブログをサブドメインからwwwに引っ越そうとしてエクスポートやインポートを繰り返していたのですが、エラーも発生したので残骸があったとしてもおかしくありません。
FTPソフトであればアクセスできるようなのですが、さくらインターネットのサポートにお願いして消していただくこともできるようです。
もう一つ考えられる対策方法にphp.iniで一時的に一時ファイルの在り処を変える方法があります。
今回の対策
今回は下記のように指定しました。(さくらインターネットのレンタルサーバー、プレミアムプランでの設定例ですが、状況に応じて異なる可能性もあるので、マニュアルなどを参考にして十分に注意して設定をお願いします)
さくらインターネットではコントロールパネルの「スクリプト設定」のメニューの中にphpiniファイル設定というメニューがあります。ここでも、「上級者向け」の設定で言語に関する仕組みが理解できない場合は標準のままで利用するように注意書きがあります。
sys_temp_dir="/home/自分のディレクトリ/www/tmp:
tmpはホームページ公開用ディレクトリのルートに予め作っておきました。危険なので、.htaccessでtmp内は閲覧されることができないようにガードをかけました。
これで問題なくWordPressで記事の投稿やファイルのアップロードができるようになりました。
数日経過して、/var/tmpの中身が削除されたころ、php.iniから該当の行は削除しておきます。また、tmpディレクトリと.htaccessの追加行は削除します。
コメント