「PHP」の版間の差分

提供: Wikinote
移動: 案内検索
(その他)
 
(同じ利用者による、間の14版が非表示)
行1: 行1:
 
== 覚え書き ==
 
== 覚え書き ==
 +
=== ユーザ定義関数 ===
 +
関数定義の方法も各言語さまざまで覚えられないんすよ。。
 +
引き数に $ が必要なことに注意。
 +
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
 +
{
 +
    echo "関数の例\n";
 +
    return $retval;
 +
}
 +
 
=== 配列について ===
 
=== 配列について ===
 
==== 初期化 (定義) ====
 
==== 初期化 (定義) ====
行8: 行17:
 
** 使い方:<code>if (isset($aArray)) ...</code>
 
** 使い方:<code>if (isset($aArray)) ...</code>
 
==== 値の追加 ====
 
==== 値の追加 ====
* <code>$aArray[] = $item;</code>
+
* <code>$aArray[key] = $item;</code>
 +
* <code>$aArray[] = $item;</code> (自動で番号付与)
 +
 
 
=== 混沌の比較演算子 ===
 
=== 混沌の比較演算子 ===
 
* <code>NULL</code> と <code>array()</code> は <code>==</code> で比較すると同一であるが、<code>===</code> で比較すると異なる。
 
* <code>NULL</code> と <code>array()</code> は <code>==</code> で比較すると同一であるが、<code>===</code> で比較すると異なる。
 
** こういう複雑さが嫌なんだよなあ…。やっぱり C が簡潔で良い。
 
** こういう複雑さが嫌なんだよなあ…。やっぱり C が簡潔で良い。
 +
 +
=== メッセージの出力先 ===
 +
CentOS 5 のデフォルトでは、PHP のエラーの出力先は Apache のエラーログ (/var/log/httpd/error_log) になっている。
 +
PHP でプログラムを組んでいる場合などには表示しているページに出力された方が楽なので、設定を切り替える。
 +
 +
設定は /etc/php.ini の以下の部分
 +
error_reporting  =  E_ALL ★お好みで変更する。デフォルトは E_ALL
 +
  :
 +
;display_errors = Off
 +
display_errors = On ★
 +
 +
ただし、セキュリティ上好ましくないため、できるだけ Off にすること。
 +
 +
=== その他 ===
 +
* include() と require() はどちらも指定されたファイルを読み込み、評価する関数だが、エラーが発生した場合の動作が異なる。require() ではエラーが発生すると処理を中断する。
 +
* テキストファイルの内容から 1 行 1 要素の配列を生成するには、file() 関数を使う。
 +
* 文字列をデリミタで分割して配列を生成するには、explode() 関数を使う。第 1 引数がデリミタ。
 +
* $_POST を展開するには、extract() 関数を使う。
  
 
== Tips ==
 
== Tips ==
行17: 行46:
 
=== シェルの実行結果を取得する ===
 
=== シェルの実行結果を取得する ===
 
<code>shell_exec()</code> 関数を使う。
 
<code>shell_exec()</code> 関数を使う。
  <?
+
  <? // サーバが起動してからの日数を得る。
 
  $sec = shell_exec("gawk '{ print $1 }' /proc/uptime");
 
  $sec = shell_exec("gawk '{ print $1 }' /proc/uptime");
 
  print floor($sec / 60 / 60 / 24);
 
  print floor($sec / 60 / 60 / 24);
 
  ?>
 
  ?>
 +
 +
=== 7 行アップローダ (7up.php) ===
 +
7up.php という名前にしたいがために HTML 含めて 7 行に押さえ込んだアップローダ。
 +
エラー処理はほとんどしていません。
 +
  1 <html><head><title>7up</title></head><body>
 +
  2 <form action="7up.php" method="POST" enctype="multipart/form-data">
 +
  3 <input type="file" name="upfile" size="50" /><input type="submit" value="upload" /></form>
 +
  4 <? if (isset($_FILES['upfile']))
 +
  5    if (move_uploaded_file($_FILES['upfile']['tmp_name'], 'files/'.$_FILES['upfile']['name']))
 +
  6        chmod('files/'.$_FILES['upfile']['name'], 0644); ?>
 +
  7 <nowiki><p><a href="files">uploaded files</a></p></nowiki></body></html>
 +
7up.php と同じディレクトリに files というディレクトリを作成して使用します。
 +
files のパーミッションを 777 にしないとダメかも。

2010年8月12日 (木) 00:42時点における最新版

覚え書き

ユーザ定義関数

関数定義の方法も各言語さまざまで覚えられないんすよ。。 引き数に $ が必要なことに注意。

function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
    echo "関数の例\n";
    return $retval;
}

配列について

初期化 (定義)

  • $aArray = array(); で項目数 0 の配列が定義される。
  • 定義した場合は、count() で値を持つかどうか確認する。
  • 定義しない場合、isset() で定義されたかどうか確認後、参照する必要がある。
    • いきなり count などを行うと、Undefined variable のエラーが出る。
    • 使い方:if (isset($aArray)) ...

値の追加

  • $aArray[key] = $item;
  • $aArray[] = $item; (自動で番号付与)

混沌の比較演算子

  • NULLarray()== で比較すると同一であるが、=== で比較すると異なる。
    • こういう複雑さが嫌なんだよなあ…。やっぱり C が簡潔で良い。

メッセージの出力先

CentOS 5 のデフォルトでは、PHP のエラーの出力先は Apache のエラーログ (/var/log/httpd/error_log) になっている。 PHP でプログラムを組んでいる場合などには表示しているページに出力された方が楽なので、設定を切り替える。

設定は /etc/php.ini の以下の部分

error_reporting  =  E_ALL ★お好みで変更する。デフォルトは E_ALL
  :
;display_errors = Off
display_errors = On ★

ただし、セキュリティ上好ましくないため、できるだけ Off にすること。

その他

  • include() と require() はどちらも指定されたファイルを読み込み、評価する関数だが、エラーが発生した場合の動作が異なる。require() ではエラーが発生すると処理を中断する。
  • テキストファイルの内容から 1 行 1 要素の配列を生成するには、file() 関数を使う。
  • 文字列をデリミタで分割して配列を生成するには、explode() 関数を使う。第 1 引数がデリミタ。
  • $_POST を展開するには、extract() 関数を使う。

Tips

シェルの実行結果を取得する

shell_exec() 関数を使う。

<? // サーバが起動してからの日数を得る。
$sec = shell_exec("gawk '{ print $1 }' /proc/uptime");
print floor($sec / 60 / 60 / 24);
?>

7 行アップローダ (7up.php)

7up.php という名前にしたいがために HTML 含めて 7 行に押さえ込んだアップローダ。 エラー処理はほとんどしていません。

 1 <html><head><title>7up</title></head><body>
 2 <form action="7up.php" method="POST" enctype="multipart/form-data">
 3 <input type="file" name="upfile" size="50" /><input type="submit" value="upload" /></form>
 4 <? if (isset($_FILES['upfile']))
 5     if (move_uploaded_file($_FILES['upfile']['tmp_name'], 'files/'.$_FILES['upfile']['name']))
 6         chmod('files/'.$_FILES['upfile']['name'], 0644); ?>
 7 <p><a href="files">uploaded files</a></p></body></html>

7up.php と同じディレクトリに files というディレクトリを作成して使用します。 files のパーミッションを 777 にしないとダメかも。