PHPプログラムの引数に渡される文字列型について
- PHPプログラムの引数に渡される文字列型に関してご質問があります。
- 具体的には、%php stringcast.php 100のように実行すると、引数の100はPHPには文字列型として渡されます。
- 参考書には、作業の流れが分からず、%php stringcast.php 100とは何のことなのかがわかりません。
- ベストアンサー
%php stringcast.php 100
<?php // stringcast.php if (!isset($argv[1])) { exit; } $num = $argv[1]; if ($num == 100) { echo "num is 100", PHP_EOL; } else { echo "num is not 100",PHP_EOL; } このプログラムを %php stringcast.php 100のように実行すると、引数の100は PHPには文字列型として渡されます。・・・ 以上参考書にあります。 作業の流れが分かりません。 %php stringcast.php 100とは!何のことなのでしょうか!? 以上宜しくお願いします。
- Campus2
- お礼率47% (226/475)
- PHP
- 回答数6
- ありがとう数1
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
こちらを参考にphp.exeにパスを通してください。 http://www.phpbook.jp/install/install/index3.html
その他の回答 (5)
- kmee
- ベストアンサー率55% (1857/3366)
\c:\php; を追加したのでは C:\Program Files (x86)\Windows Live\Shared\c:\php というディレクトリになります。C:\phpは追加されていません。 PATHでディレクトリを区切るのには、 ; (セミコロン)を使います。 先のURLにある画像でも C:\phpの前に ; があります。 [コマンドプロンプト path]で検索してみましょう。 また、[コマンドプロンプト 使い方] で基本的な使い方くらいは勉強しましょう
補足
ご回答誠にありがとうございます。 「コマンドプロンプト path」で検索はしましたが! いまいち分かりませんでした!? C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Program Files\Broadcom\Broadcom 802.11 Network Adapter\Driver;;;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;;;;;;;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files (x86)\Windows Live\Shared;c:¥php; 取り合えず;セミコロンをcの前に追加しましたが c:\>php -v 'php' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 PATHが通りません! 以上 宜しくお願いします。
>> コマンド プロンプトでCDコマンドでカレントを以下としました。 >> c:\> じゃなくって… 「cd C:\xampp\htdocs\study.localhost」で1行の命令です。 「php stringcast.php 100」で1行の命令です。
補足
ご回答誠にありがとうございます。 本当に助かります^^ 以下コマンドプロンプトで実施した結果です。 --------------------------------------------------- C:\Users\Administrator>cd C:\xampp\htdocs\study.localhost C:\xampp\htdocs\study.localhost>php stringcast.php 100 'php' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 C:\xampp\htdocs\study.localhost> ----------------------------------------------------- 以上ですが、確かに 「C:\xampp\htdocs\study.localhost」 には「stringcast.php」というファイルは存在します。 stringcast.phpの中身は <?php // stringcast.php if (!isset($argv[1])) { exit; } $num = $argv[1]; if ($num == 100) { echo "num is 100", PHP_EOL; } else { echo "num is not 100",PHP_EOL; } すみません、以上宜しくお願いいたします。
cdコマンドに続いてphpコマンドを実行します。 cd C:\xampp\htdocs\study.localhost php stringcast.php 100
補足
ご回答誠にありがとうございます。 私のPHP、最後の砦はこのサイトのみとなりました。 すみませんまたやり方の質問ですが! コマンド プロンプトでCDコマンドでカレントを以下としました。 c:\> それで!これに続くコマンドは何と入力しらいいのでしょうか! ご回答くださったxampp\htdocs\study.localhost php stringcast.php 100 をすこし組み合わせてやりました。 以下私が実施した結果です。 c:\>xampp\htdocs\study.localhost 'xampp\htdocs\study.localhost' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 c:\>xampp\htdocs\study.localhostphp stringcast.php 100 'xampp\htdocs\study.localhostphp' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 c:\>xampp\htdocs\study.localhostphp\stringcast.php 100 ディレクトリ名が無効です。 c:\>xampp\htdocs\study.localhostphp\%php stringcast.php 100 ディレクトリ名が無効です。 以上試しましたが・・わかりません すみません、よろしくお願いいたします。
【重大な訂正】 php stringcast.php 100 自分で入力するのはこの3か所です。最初の「php」も必要でした。「php.exe」から「string.php」を、第1引数「100」を伴って実行するという意味です。
コマンドラインから実行しているだけですね。Linux系ではターミナル、Windowsではコマンドプロンプトとも呼ばれます。 %php → カレントディレクトリ表示(ここは入力するのではなく最初から表示されているもの) stringcast.php → 実行するファイル(ここは入力する) 半角スペースで区切って… 100 → 第1引数として渡されます。具体的には $argv[1] に文字列 "100" として代入されます。 $argv[0] には実行したファイル名 "stringcast.php" が渡される仕様となっており、こっちは第0引数なんて呼ぶのが妥当でしょうか。公式的な命名は分かりませんが。 PHP Manual - $argv http://php.net/manual/ja/reserved.variables.argv.php 【参考: Apache(Webブラウザ向けのサーバー)で実行する場合】 パラメータは $_GET $_POST $_COOKIE $_REQUEST で受け取ります。 PHP Manual - スーパーグローバル http://php.net/manual/ja/language.variables.superglobals.php いつもとても厳しい回答がつくのを見ていて苦笑いしていますが頑張ってください・・・ww
補足
To_aru_User様毎どうご回答ありがとうございます。 助かります^^ それで、やり方がいまいち!です。 質問したファイル名を stringcast.phpとし、c:\>xampp\htdocs\study.localhostへ格納しまして、 c:\>xampp\htdocs\study.localhost\stringcast.phpとなりました。 それで現在私のPCで コマンドプロンプトを開いた最初の表示はC:\Users\Administrator>です。 cd c:\コマンドで 以下のカレントドライブに切り替えて c:\>xampp\htdocs\study.localhost\stringcast.phpを実行したとこと ちゃんとファイルは開きました。 パソコンの環境は以上です。 それで、申し訳ございませんが! この場合の %php stringcast.php 100 を実行する手順はどうしたらいいのでしょうか? すみません、私の現在のレベルではやさしい手順が必要です。 どうぞ宜しくお願いいたします。
関連するQ&A
- = $argv[1];はどんな働きがありますか!?
<?php // stringcast.php if (!isset($argv[1])) { exit; } $num = $argv[1]; if ($num == 100) { ←(1) echo "num is 100", PHP_EOL; } else { echo "num is not 100",PHP_EOL; } このプログラムを %php stringcast.php100 のように実行する、引数の100はPHP文字列型として渡されます。 したがって、(1)の比較では、文字列"100"の入って変数$numと、整数100が比較されるため、 文字列"100"は整列100へとキャストされまた後、比較演算が実行されます。 今回は、動作の結果に違いはありませんが、ここで整数同士を比較しているつもりでも実際には 文字列を整数の比較が行われ、キャストが発生している、という挙動を把握しているか、していない かではなく大きな違いがあります。引数とし期待している値の型が決まっている場合、明示的にキャ ストを行い、厳密な比較演算子(===など)を用いるほうが安全です。 -------------------------------------------------------- 以上、参考書をまるごと入力しました。 そこで $num = $argv[1];で!$argv[1]とはこのプログラムではどんな働きがあるのでしょうか!? ($argv[1];を$numに代入だと思います。間違っていたなら御免なさい。) 宜しくお願いします。 なお・批判的なご回答はお控えくださいませ。
- ベストアンサー
- PHP
- $argv[1]) && $argv[1]・同じ
以下のプログラムですが! <html> <head> <meta "charset=utf-8" /> <title>論理演算子</title> </head> <body> <?php if(isset($argv[1]) && $argv[1]) { echo '与えられた引数は真です',PHP_EOL; } else{ echo '引く数が与えられていないか、与えられた引数が真ではありません' ,PHP_EOL; } ?> </body> </html> 以上のプログラムの実行結果は以下となりました。 引く数が与えられていないか、与えられた引数が真ではありません 以上の実行結果は”真でありません”と出ています。 $argv[1]) && $argv[1]・・・&&は理論積の、両辺は同じなのでtrueならばtrueの真だから、 "与えられた引数は真です"と出るのではないんでしょうか!? 以上よろしくお願いします。
- ベストアンサー
- PHP
- どうしたら確認ができますか!?
以下参考書をそまま入力しました。 ] --------------------------------------------------- 論理積と論理和では、2通りの表記方法がありますが、これは演算子の優先順位(注6)が違います。 (注意6)優先順位については3.2.3(P80)を参照 <?php $flag and foo(); if(isset($argv[1] && $argv[1] { echo '与えられた引数は真です',PHP_EOL; } else{ echo '引数が与えられていないか、与えられた引数が真ではありません' ,PHP_EOL; } この列では、引数が与えられているかをまずチェックし、与えられている場合はそれが真である かを調べます。論理演算子では、評価結果がわかった時点で演算結果を返します。これを短絡評価 といいます。短絡評価されるため、最初のisset($argv[1])が為である場合、次の$argv[1]の評価 は一切行われません(もし評価されてしまったならば、NOtic:Undefined offset:1となってしまい ます)。 たとえば、次の例では、$flagが為の場合では、関数foo()が呼ばれることはありません。 <?php $flag and foo(); ----------------------------------------------------------- 以上ですが、 これって、どうしたら確認ができますか!? xamppは働いています。 HTMLで試しましたがParseエラーがでました。 <html> <head> <meta "charset=utf-8" /> <title>論理演算子</title> </head> <body> <?php if(isset($argv[1] && $argv[1] { echo '与えられた引数は真です',PHP_EOL; } else{ echo '引く数が与えられていないか、与えられた引数が真ではありません' ,PHP_EOL; } ?> </body> </html> 以上の実行結果は 以下です。 Parse error: syntax error, unexpected '&&' (T_BOOLEAN_AND), expecting ',' or ')' in C:\xampp\htdocs\study.localhost\php.php on line 10 以上です。 よろしくお願いします。
- ベストアンサー
- PHP
- よくわからなかったので試してみました。
<?php if (isset($default)){ $param = $argv[1]; } else{ $param = 'default'; } ?> --------------------------------------------- <?php if (isset($argv[1])){ $param = $argv[1]; } else{ $param = 'default'; } <? ------------------------------------------- 以上実行結果は同じですが、プログラムを組む場合とくどちらを選択しても 宜しいのでしょうか!? 以上よろしくお願いします。
- ベストアンサー
- PHP
- $argv[1] の真偽判定
PHPの勉強を始めた初心者です。 次のようなスクリプトを書いてみたのですが、false と入力しても、真と判定されてしまいます。 何故こうなるのか、お教えいただければ幸いです。 <?php // p075_a.php if( isset($argv[1]) && $argv[1] ) { echo "与えられた引数は真です\n"; } elseif ( isset($argv[1]) && !$argv[1] ) { echo "与えられた引数は偽です\n"; } else { echo "引数が与えられていません\n"; } [study_php@localhost ch03]$ php p075_a.php '' 与えられた引数は偽です [study_php@localhost ch03]$ php p075_a.php "" 与えられた引数は偽です [study_php@localhost ch03]$ php p075_a.php 0 与えられた引数は偽です [study_php@localhost ch03]$ php p075_a.php 0.0 与えられた引数は真です [study_php@localhost ch03]$ php p075_a.php false 与えられた引数は真です [study_php@localhost ch03]$
- ベストアンサー
- PHP
- echo (float)'1e2foo', PHP
echo (float)'15foo', PHP_EOL; echo (float)'15.33foo', PHP_EOL; echo (float)'1e2foo', PHP_EOL; echo (float)'foo', PHP_EOL; 以上参考書を転記しました 試しに echo '<pre>'; echo (float)'15', PHP_EOL; echo (float)'15.33', PHP_EOL; echo (float)'1e2', PHP_EOL; echo (float)'', PHP_EOL; echo '</pre>'; とfooを省きました、二つのプログラムの実行結果は 以下ですがと同じです。 15 15.33 100 0 一つ目の質問です。 なぜ、参考書はfooをあえて入れてのでしょうか? 二つ目の質問です。 1e2を1e3にすると結果が1000になります。 1eて何ですか!? 宜しくお願いします。
- 締切済み
- PHP
- php言語の脆弱性について
php言語の脆弱性について パスワード認証において、phpのstrcmp, strcasecmpといった関数には脆弱性があると聞きます。 そこで、具体的にどのような脆弱性があるのかお伺いしたいと思います。 たとえば、認証画面にパスワードの送信フォームがあり、パスワードが分からない場合 $pass = **** if (isset($_POST['pass'])) if (strcasecmp($_POST['pass'], $pass) == 0) echo "Correct!"; else echo "Incorrect" というプログラムになっていた場合、送信フォームにどのような文字列を渡せば認証が通るのでしょうか。 また、認証が通る仕組みについても教えていただけたらと思います。
- ベストアンサー
- ネットワーク
- phpのコードでこの2つは何が違うんでしょうか?
phpのコードでこの2つは何が違うんでしょうか? 問題文が画像に書いてあるもので、上のコードは私が考えたもので、下のコードは画像の問題の答えです 私の解いた答え <?php $age = 10; if(10 <= $age < 20){ echo("10代"); }else if(20 <= $age < 30){ echo("20代"); }else if(30 <= $age < 40){ echo("30代"); }else{ echo("それ以外"); } 画像の問題文の正解 <?php $age = 43; if($age >= 10 && $age < 20){ echo("10代"); }else if($age >= 20 && $age < 30){ echo("20代"); }else if($age >= 30 && $age < 40){ echo("30代"); }else{ echo("それ以外"); }
- ベストアンサー
- PHP
- 変数$importfileに第1引数($1)のファイルPATHを表示したい
下記のスクリプトを書きましたが ./aa.sh: line 6: =/tmp: command not found と言われるのはなぜですか? 変数$importfileに第1引数($1)のファイルPATHを表示したいです。 1 #/bin/bash 2 3 echo $# 4 if [ $# -eq 1 ] 5 then 6 $importfile=$1 7 echo "$importfile" 8 else 9 echo "argv file notfound" 10 exit; 11 fi 12 実行結果 ./aa.sh /tmp 1 ./aa.sh: line 6: =/tmp: command not found
- ベストアンサー
- Linux系OS
お礼
ご回答誠にありがとうございました。 まだ解決していませんが、急いでいますので再度スレを立ち上げます。 今後ともよろしくお願いいたします^^
補足
ご回答誠にありがとうございます。 ご紹介していただいた http://www.phpbook.jp/install/install/index3.html ですが、その通りやりましたが! コマンドプロンプト 以下を実施したところ、 -------------------------------------------------------------------- c:\>php -v 'php' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 -------------------------------------------------------------------- 以上ですで もしパスが通った場合は以下みたいに なると説明がありました。 ------------------------------------------------------------------ c:\>php -v PHP 5.5.7 (cli) (built: Dec 11 2013 13:48:27) Copyrighrt (c) 1987-2013 The PHP Group Zend Engine v2.5.0, Copyrigh (c) 198-2013 Zend Technologies C:\> ------------------------------------------------------------------------ ご紹介していただいたHPの中に PHPはサーバサイドで動作するスクリプト言語としてだけではなくコマンドラインからも利用できるようになっています。コマンドラインから使用する場合に使われる「php.exe」はPHPをインストールしたディレクトリに入っています。そこでにPHPをインストールしたディレクトリにPATHを通しておきます。・・・ とあります。 HPの説明にはc:¥php;を最後に追加するだけでいいと書いてありまし 「php.exe」は私のパソコンからはC:\xampp\phpにありましたので、 システムプロパティ⇒詳細設定⇒環境変数⇒システム環境変数⇒Pathの最後を\c:\xampp\php; として試しましたが、同じ結果でした。 HPの説目には最後にc:¥php;を追加すればいいとは書いてありましたが、駄目でしたので \c:\xampp\php;も試しましたが駄目! 以下はシステム環境変数⇒Pathのところをまるごと貼りつけました。 C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Program Files\Broadcom\Broadcom 802.11 Network Adapter\Driver;;;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;;;;;;;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files (x86)\Windows Live\Shared\c:\php; あるいは最後を、\c:\xampp\php;としましたが、結果は同じでPATHは通りませんでした。 なぜPATHが通らないのでしょうか? もし分かられたらご教授を宜しくお願いいたします。