escapeshellarg

 phpでsyncthingサーバの新しいファイルをローカルにコピーするスクリプトを作っていたけど、一部のディレクトリでコピーできていない。ログを取るようにして原因発見。Androidのコラージュ作成ソフトが作成するファイルの名前にスペースが入っていたせいだった。
 いったんは$filename=str_replace(' ','\\ ',$filename);したけど、ちょっと検索してescapeshellargという関数があるのを発見。こりゃ便利だ。

 とはいえ、外部コマンドを呼び出すときはクォテーションで囲って、phpの関数に渡すときははずさないとうまくいかない。諸悪の根源はファイル名にスペースを入れるAndroidアプリだけど。