(PHP) Warning : unlink(): http does not allow unlinking in が出た時の対処法

(PHP) Warning : unlink(): http does not allow unlinking in が出た時の対処法

 

phpでファイル削除を行うunlink()メソッドがあるが、
unlink()メソッドを使用した際、以下の様なエラーが出た。

Warning : unlink(): http does not allow unlinking in 〜〜

 

 

Warning : unlink(): http does not allow unlinking inが出る原因

Warning : unlink(): http does not allow unlinking in エラーが出る原因は、
削除しようとしているファイルが、絶対パスで指定されているからだ。

実際に筆者も、削除ファイルのパスをvar_dump()で確認して見たところ、
http://〜から始まる絶対パスでunlink()しようとしていた。

 

unlink()に絶対パスを指定してはいけない理由

unlik()の際に絶対パスで削除できない理由は、
unlink()の対象は必ず、ファイルの実態である必要があるから
だ。

例えば、絶対パスでファイルを削除しようとした場合、他のサーバのファイルも削除できることになってしまう。それではまずいので、例え自身のサーバだとしても、相対パスでファイルの実態を指定している場合しか受け付けない様にしてあるのだと思う。

 

Warning : unlink(): http does not allow unlinking inが出た時の対処法

Warning : unlink(): http does not allow unlinking in エラーが出る場合は、
以下の様にすることで対処することができる。

 

① 自身のサーバファイルをunlink()する場合:相対パスに変換

自身のサーバファイルをunlink()する場合は、
絶対パスを相対パスになる様に変換してあげればOKだ。

PHPでは文字列から特定の文字を置換するstr_replace()メソッドなどがあるので、
「http://~~」部分を「../~~」などの相対パスに置換してやるなどすれば対処できるだろう。

 

② 他のサーバファイルをunlink()する場合:事前にマウントしておく

他のサーバファイルをunlink()する場合は、
事前にサーバ同士をマウントしておくことで、相対パスでの削除が可能となる。

他サーバのファイルを削除したい場合、本来(物理的に違うサーバなのであたり前だが)相対パスは指定できない。しかし、サーバのマウントを行っておくことで、マウントポイントから他サーバのファイルを操作できる様になる。

マウントポイント経由で相対パスを指定することで、無事にunlink()メソッドでファイルを削除できるという流れだ。

マウントポイントからunlinkする画像

 

サーバのマウントについては、以下の記事で紹介しているので初耳という方はご一読いただけると幸い。

 

または、他サーバ側でもphp実行用のwebサーバとして運用している場合は、普通に削除用のphpプログラムを用意して、そこにhttpで問い合わせる方法の方がシンプルで楽かと。

 

関連

(PHP) php7.2でcount()のWarningが出る【対処法】
(PHP) php7以降で、Illegal string offset のエラーが出る【対処法】
(PHP) Invalid arguments passed in ~の原因と対処法

 

https://www.php.net/manual/ja/function.unlink.php

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です