昨日の続き。
普通の場合は特に気にすることはないが、ファイル名にスペースが含まれると挙動がおかしくなる。
こんなphpスクリプトを作って、実行権限をつけて引数%Fを与えるよう設定し、2つのファイルを選択して右クリックメニューから実行してみる。ファイル名は"/tmp/Screenshot 2.png"と"/tmp/Screenshot 1.png"。
#!/usr/bin/php <?php $file='nanchara.txt'; array_shift($argv); file_put_contents($file, $argv); ?>
ダブルクオーテーションで囲んだ場合。
a:1:{i:0;s:47:"'/tmp/Screenshot 2.png' '/tmp/Screenshot 1.png'";}
それぞれのファイル名がシングルクォーテーションで囲まれてひとつの引数として与えられている。
シングルクオーテーションで囲んだ場合。
a:4:a:3:{i:0;s:15:"/tmp/Screenshot";i:1;s:21:"2.png /tmp/Screenshot";i:2;s:5:"1.png";}
- /tmp/Screenshot
- 2.png /tmp/Screenshot
- 1.png
の3つとなっている。ファイル名中のスペースで分割されているが、本来のファイルの区切りのスペースでは分割されていない。
使えへんがな。
一応なにも囲まない場合も試してみる。
a:2:{i:0;s:21:"/tmp/Screenshot 2.png";i:1;s:21:"/tmp/Screenshot 1.png";}
ということから何も囲まない場合がうまく行くはず。なんだが、どうも違うような気がする。
とりあえずの解決策として、コマンドラインに渡す変数はクォーテーションで囲むというシンプルな解決策を採用。外部コマンドでやっている処理を全部phpでやるという選択肢も考えたが、相対的に手間がかかりすぎるので。