本サイト/記事は移転しました。

約10秒後にリダイレクトします。

phpにコマンドラインからスペース入りのファイル名を渡す場合はパイプで

 thunarのアクションなどでphpスクリプトにファイル名を渡す際に、$argvを使っていたけど

  1. ファイル名にスペースが含まれている場合のことを考えて、impludeで連結する処理を入れて置かなければならない。
  2. 処理によってはスペースを「\ 」に置換したりする必要がある。
  3. $argv[0]がphpスクリプトそのものなので、それを除いておく必要がある。

 ということで、けっこう面倒だけど、他の方法が思いつかなかった。

 それが突然ひらめいた。ファイル名をechoして、パイプで渡してやればいい。thunarのアクションには

echo %f |script.php

 などとして、phpの方では

<?php
$line = trim(fgets(STDIN)); // STDIN から 1 行読み込む
?>

PHP: I/O ストリーム - Manual
と1行で処理可能。

 すっきりしたわ。

 シェルスクリプトでも使える、かな。