XAMPPのPHPに対して、コマンドプロンプトとPowerShellの双方から同じ
password_verify
を実行しました。
実行したのは以下の文。
php -r "var_dump(password_verify('shioi', '$2y$10$Zx0AJfcI/Q8Et8pdkekcB.WJ6Y6rvP3bTlLdqbAe7Q7cGbqNxYx.S'));"
$
を含む文字列はダブルクォーテーションだと変数として展開されるので、関数の引数の文字列はシングルクォーテーションで括るようには気を付けました。
さて、結果はどうなるか。
# コマンドプロンプト
>php -r "var_dump(password_verify('shioi', '$2y$10$Zx0AJfcI/Q8Et8pdkekcB.WJ6Y6rvP3bTlLdqbAe7Q7cGbqNxYx.S'));"
Command line code:1:
bool(true)
# PowerShell
> php -r "var_dump(password_verify('shioi', '$2y$10$Zx0AJfcI/Q8Et8pdkekcB.WJ6Y6rvP3bTlLdqbAe7Q7cGbqNxYx.S'));"
Command line code:1:
bool(false)
……何……だと……?
ついでに
php -v
でバージョンを確認しましたが、PHPのバージョンはまったく同じでした。
検索してみましたが、類似症例が見当たらないので環境固有な気もしますが、これで嵌まっていました。
原因は解明できていませんが、備忘録としてメモしておきます。
追記
PowerShellのエスケープシーケンスが
\
ではなく
`
だということを知ったので以下のコマンドを試してみました。
> php -r "var_dump(password_verify('shioi', '`$2y`$10`$Zx0AJfcI/Q8Et8pdkekcB.WJ6Y6rvP3bTlLdqbAe7Q7cGbqNxYx.S'));"
結果は……
true
になりました。これが原因だったのか……。