【先着1,000名様!】1,000円分をプレゼント!

PHP初心者です。
基本的なことですが、命令は記述順に処理されるのでしょうか?
たとえば、

(1)外部から何かをダウンロードする
(2)print "123";

とした場合、(1)(2)が記述順に実行されると思います。
・・・実は今までActionScript(Flash)を勉強していましてこれが逆でした。((2)→(1)の順番)このためやや混乱しています。
PHPの場合は処理はあらゆる場合とも記述順と考えて問題ないでしょうか??
お詳しい方、よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

基本的に上から下(記述順)に処理されます。


当然、関数等を使用する事で先に読み込んだ関数を後から呼び出す、という事で入れ替わる事があります。

ActionScriptやJavaScriptには時間という概念が入り込み、しかもリアルタイムで処理させようとしているため、どうしても((2)→(1)の順番)になってしまうわけです。外部読み込みの命令があったとしても時間は止めないため、読み込むのに時間がかかるかもしれないので先にどんどん次の命令を進める、というような感じです。JavaScriptの場合はブラウザによっても挙動が違うため、かなり悩まされる事がありました。

PHPの外部読み込みは、部分的に外部読み込みファイルとしたもので、ActionScriptやJavaScriptの外部読み込みはそこで止まらずコールバック関数を呼び出す、というような感覚でとらえていれば良いと思います。

参考まで。
    • good
    • 0
この回答へのお礼

なるほど!
やはり記述順でいいのですか。
ActionScript習い始めは順番に処理されずかなり悩みましたがPHPはだいじょぶそうですね。
ありがとうございました。

お礼日時:2007/05/12 10:16

必ずしもそうとは言えません。



例えば、ある関数の本体部分(B)を先にコーディングし、
その関数を呼び出す側(A)を後ろにコーディングする、という
スタイルをとることができます。

この場合、後ろに書いてある、呼び出す側(A)を先に実行し、
前に書いてある関数(B)を後から実行することになります。

なお、投稿にあった、ダウンロードとprintの例では、
間違いなく「ダウンロード」→「print」の順に実行します。
    • good
    • 0
この回答へのお礼

なるほど。
関数(の定義)についてはどこに書いても呼び出してくれるのは知っています。
ありがとうございました。

お礼日時:2007/05/12 10:05

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qphpファイルの命令実行順番について

いつも勉強させていただいております。

初歩的な質問になるかもしれませんが、回答いただければ幸いです。

現在PHPの学習をしております。


phpファイルに記載された命令がどのような順に実行されるのか、ということにたいして私なりの理解が正しいかどうか確認していただきたいのと、ソースについての質問をさせていただきたく思います。


以下、動作確認済みのサンプルソースです。



<html>
<head>
<title>
画像を保存
</title>
</head>
<body>
<?php
if(@$_POST["text1"])
{
$width = 300;
$height = 200;
$fname = $_POST["text1"];
$img = imagecreate($width, $height);
imagecolorallocate($img, 0, 255, 0);

if(imagepng($img,$fname))
{
echo "<p><a href=\"$fname\">作成されたファイル</a>";
}
}
?>
<form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>">
<table>
<tr>
<td>
<input type="text" name="text1" value="test.png" >
</td>
<td>
<input type="submit" value="作成" name="sub1" >
</td>
</tr>
</table>
</form>
</body>
</html>

”作成”ボタンを押すと、text.pngという画像ファイルをこのソースがあるフォルダ内に保存し、というだけの処理をするものです。







・上記サンプルにおける、記述された命令の実行順について

(1)
<?php で囲まれている部分が動作する。

→最初は$_POSTに何も入っていないので、if条件は偽となり、何も動作しない。

(2)
<form>から、</form>で囲まれている部分が動作する。
テキスト入力エリアや作成ボタンなどのイメージが完成する

PHP_SELFを$_SERVERに指定しているので、この情報をこのファイル内の、<?php~で囲まれているところに渡す。


ここまでで画面表示が完了する。さらに作成ボタンを押したときの動作を続ける

(3)
<input type="text" name="text1" value="test.png" >
初期値として画面に表示したい値をvalueに指定する。

<input type="submit" value="作成" name="sub1" >
ボタンに表示したい文字をvalueに指定する。

作成ボタンを押すことで、"text1"という名前とヒモづいたテキストエリアに書かれた情報がPOSTにより渡される。
このサンプルではtextひとつしかないが、他のラジオボタンなど全ての情報が作成ボタンを押すことにより、渡される。
これにより、$_POSTへnameに該当するものを指定すると、それにヒモづいた情報が取得できるようになる。

作成ボタンを押した後は、(1)に戻り、text1にヒモづく情報が見つかることにより、if条件内の処理が動作する。
この場合は「作成されたファイル」という文字がでてくる。

さらに(2)が動作し、「作成されたファイル」という文字の下にテキストエリアや作成ボタンが表示される。





質問
<form>内にあるactionへの設定ですが、"<?php echo $_SERVER["PHP_SELF"]?>"は決まり文句のようなもので、PHP_SELFのみ期待する動作に応じて変化する、という考え方でいいでしょうか?

この記述は使用している参考書にあったものですが、googleなどで検索するとaction=ファイル名、となっているものもありました。なぜこのファイルではこのような書き方をしていて、他のものではファイル名をactionに設定しているのでしょうか?
actionへ指定するものはどういったものを指定するものなのでしょうか?

actionの使い方がよくわかりません。


お手数ですが、ご回答いただける方、よろしくお願いします。

いつも勉強させていただいております。

初歩的な質問になるかもしれませんが、回答いただければ幸いです。

現在PHPの学習をしております。


phpファイルに記載された命令がどのような順に実行されるのか、ということにたいして私なりの理解が正しいかどうか確認していただきたいのと、ソースについての質問をさせていただきたく思います。


以下、動作確認済みのサンプルソースです。



<html>
<head>
<title>
画像を保存
</title>
</head>
<body>
<?php
if(@$_POST["text1"])
{
$width = 300;
$height = 200...続きを読む

Aベストアンサー

>サーバー上で送られたクッキーの情報をもとに過去訪れたかどうかを判断し、リンクの色をどうするか決めた上で、その色情報も含めたHTML情報をブラウザへ送信し、
これは違いますよ。
これは基本的にブラウザの機能です。
どのURLにアクセスしたかを予めブラウザは記憶しています。
リンクタグ内のURLから既にアクセスしたページかどうかを判断して、”ブラウザ”が色を変えています。
基本的に、HTML上ではアクセスした人が既読だろうが未読だろうが同じタグを使います。

ページ作成者側がCSSを使って、その色を変えたり、未読リンクの色と同じにすることはできます。

また、CSSを利用しないで、操作性の観点から、ページにtime情報などのクエリーをつけて、既読を未読にさせることはあります。
たとえばスレッド式の掲示板などで、中身が変わった場合などでも既読の色のままだと更新されたかわからない場合、
bbs.php?thread=123&time=1307769181
としていて、スレッド内容が更新されたら
bbs.php?thread=123&time=1307770000
としたりすることでまだ見ていない。
もしくは最新情報を見ていないと判断させることができます。
いくら更新されても
bbs.php?thread=123
だとブラウザのキャッシュがなくなるまで既読のままになってしまいますので。

余談も入りましたが、既読・未読はWEBサーバー上が決定するわけではなく、ブラウザ上で決定する。
その機能を使わせないように裏操作させることも可能。
ということです。

私への質問ではありませんが、ファイル一覧ページが表示されるのは、
A→A→Aと移動した場合、同じURLである為、リンク移動していないとブラウザが判断しているからだと思います。
Aにアクセスする際に/xampp/からAへアクセスした場合には、A自体が移動を一切していないとブラウザが判断し、前のページと判断した「/xampp/」に”戻った”ということではないでしょうか。

たとえば、

<html>
<head>
<title>
テスト
</title>
</head>
<body>
<?php
if(!$_GET["cnt"]){$_GET["cnt"] = 0;}
echo $_GET["cnt"]; ?>回目の訪問です。<br>
<a href="<?php echo $_SERVER["PHP_SELF"]."?cnt=".($_GET["cnt"] + 1); ?>"><?php echo ($_GET["cnt"] + 1); ?>回目の訪問をする</a>
</body>
</html>

とした場合には、毎回アクセスするURLは異なりますから、戻るを押してもそのような状況にはならないと思います。

>サーバー上で送られたクッキーの情報をもとに過去訪れたかどうかを判断し、リンクの色をどうするか決めた上で、その色情報も含めたHTML情報をブラウザへ送信し、
これは違いますよ。
これは基本的にブラウザの機能です。
どのURLにアクセスしたかを予めブラウザは記憶しています。
リンクタグ内のURLから既にアクセスしたページかどうかを判断して、”ブラウザ”が色を変えています。
基本的に、HTML上ではアクセスした人が既読だろうが未読だろうが同じタグを使います。

ページ作成者側がCSSを使って、その色を変...続きを読む

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

Qjsから呼び出されるphpの実行の順番

環境:OS-XP, IISver6.0, PHP4, Jacascript, HTML

HTMLからjsの関数を3つ呼び出し、そのうち1つ目の関数がPHPを呼び出すプログラムで、思い通りの動きをしないことからデバッグしていったところ、js内の3つの関数を実行してからPHPの関数を実行しているようでした。なぜこのような動きになるか教えてもらえませんでしょうか。

想定していた実行順序:☆
デバッグした時実行された順:※

.html
onchange="fTest(this)" ※1 ☆1

.js
function fTest(obj){
getInfo(obj); ※2 ☆2
getMore(obj); ※3 ☆4
setInfo(obj); ※4 ☆5
}

function getInfo(obj){location.href = "Info.php?status=getInfo"; }
function getMore(obj){}
function setInfo(obj){}

.php
if($status == 'getInfo'){-略- ※5☆3}

宜しくお願いします。

環境:OS-XP, IISver6.0, PHP4, Jacascript, HTML

HTMLからjsの関数を3つ呼び出し、そのうち1つ目の関数がPHPを呼び出すプログラムで、思い通りの動きをしないことからデバッグしていったところ、js内の3つの関数を実行してからPHPの関数を実行しているようでした。なぜこのような動きになるか教えてもらえませんでしょうか。

想定していた実行順序:☆
デバッグした時実行された順:※

.html
onchange="fTest(this)" ※1 ☆1

.js
function fTest(obj){
getInfo(obj); ※2 ☆2
getMore(obj); ...続きを読む

Aベストアンサー

なんとも言えませんが非同期につくってあるのでは?
なぜと言われればプログラマがそう作りたかったからです

QPHPの関数実行

<?php
function disp(){
echo "hello world";
}
?>

<form>
<input type="text">
<input type="button" onclick="<?php disp() ?>">
</form>

といったソースを書いてみたのですが、ボタンを押してみるのですが作動しません。
どこか間違えているのでしょうか、それとも作動しないのでしょうか・・・。
当方としては、formのinputボタンを押したらPHPの関数が実行させるようにしたいのですが・・・。
どなたかご助言をお願いします。

Aベストアンサー

ウソつきました
出来ましたー

<?php

if($_REQUEST[submit] == TRUE){
function disp(){
echo "hello world";
}
}

else{
function disp(){
echo "";
}
}

?>

<form method="post" action="">
<input type="text" value="<?php disp(); ?>">
<input name="submit" type="submit"value="押せ">
</form>

QPHPでjavascriptのalert文のようにデバッグ

こんにちは

現在、Flash からPHPにデータを渡して、それがPHPにわたっているかどうかを調べたいのですが、echo文などで出力してもそれがブラウザで表示されないので、どうしたらよいかわかりません。。。orz

javascriptのalert文のように警告ウィンドウを利用して変数の値などを調べる関数はあるのでしょうか?
また、なにか他によい方法がありましたら教えていただけるとありがたいです。

よろしくお願いします

Aベストアンサー

var_dump(変数)

echo で値が出ないということは、おそらく値が null もしくは空文字だと思います。

参考URL:http://jp.php.net/manual/ja/function.var-dump.php

QリダイレクトでPOST

教えてください。

リダイレクトの際、POSTで次のページにデータを渡すことは可能でしょうか?

GETだと
header("Location: "a.php?no=".$no);
と、問題なくできるのですが、
できれば、パラメータを隠したいと思います。

以上ですが、よろしくお願いします。

Aベストアンサー

多分できないです。
それに、結局クライアント側に情報を送信しているのだから、POSTにしたところでパラメータを隠した事にはならないですし。
本当に隠すならサーバ側でセッション情報を引き継ぐような形にしないとダメでしょう。

AJAXのかたちにして、ページ遷移を見えなくするというのが手っ取り早いかも。

Q文字列から、特定の文字を削除したい

アンケートで入力された値を受け取り、メールで送信しているのですが、受け取った値から、特定の文字列を削除することは可能でしょうか?

例えば電話番号の入力の場合、
03-xxxx-xxxx →03xxxxxxxx
077-xxx-xxxx →077xxxxxxx
のように、-(ハイフン)が入力されていたら、-を削除した文字列に置換してメール送信したいのです。
入力する時に、3つのテキストエリアに分けるのは諸事情でできないので、特定の文字を削除する関数か処理方法がありましたら、教えていただきたいです。
よろしくお願いします。

Aベストアンサー

str_replace
http://itbtech.itboost.co.jp/man/php_man/function.str-replace.html

<?php
$orig_telno = "03-xxxx-xxxx";

$telno = str_replace("-", "", $orig_telno);
echo $telno;

03xxxxxxxx

“PHP 文字列” あたりをキーワードに検索すれば
そんなに難しいものでもないような。

QPHP ボタンが押されたら処理を実行する

PHPプログラミングをしています。
「はい」というボタンが押されたらこの処理を行い、
「いいえ」というボタンが押されたらこの処理を行う
ということはどうすれば実装できるのでしょうか?

Aベストアンサー

どういう環境下で作っておられるのかが全然わかりませんが、
PHPというこですので、Webベースのフォームですよね。

たとえば、「はい」ボタンと「いいえ」ボタンをそれぞれフォームのSubmitにしておいて、
POST先のフォームで処理を分ければどうでしょうか。

送信元
<form name="Hai" method="POST" action="hoge.php">
<input type="hidden" name="answer" value="1">
<input type="submit" value="はい">
</form>

<form name="Hai" method="POST" action="hoge.php">
<input type="hidden" name="answer" value="0">
<input type="submit" value="いいえ">
</form>


送信先
$answer = $_POST["answer"];

if($answer == 1){
// 「はい」の時の処理
}else{
// 「いいえ」の時の処理
}


ちなみに、自分から自分へPOSTすればPHPスクリプトも2つに分けずにできると思います。
また、POSTじゃなくGETでも同様のことはできると思います。

どういう環境下で作っておられるのかが全然わかりませんが、
PHPというこですので、Webベースのフォームですよね。

たとえば、「はい」ボタンと「いいえ」ボタンをそれぞれフォームのSubmitにしておいて、
POST先のフォームで処理を分ければどうでしょうか。

送信元
<form name="Hai" method="POST" action="hoge.php">
<input type="hidden" name="answer" value="1">
<input type="submit" value="はい">
</form>

<form name="Hai" method="POST" action="hoge.php">
<input type="hidden" name="answer" ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング