内容へ移動
ClownWiki
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
php:tips
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== Tips ====== ===== カンマ区切りを配列に格納したいのに、最後に不要なカンマがあるとき ===== <code> <?php $str = "111,222,333,"; $str = rtrim($str, ","); $ary = explode("," $str); </code> ===== error_log ===== <code> bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] ) </code> * message\\ ログに記録されるエラーメッセージ。 * message_type * 0\\ message は、オペレーティング・システム のシステムログのメカニズムまたはファイルのいずれかを使って PHP のシステム・ロガーに送られます。どちらが使われるかは、 設定ディレクティブ error_log の内容により決定されます。これはデフォルトのオプションです。 * 1\\ message は、destination パラメータで指定されたアドレスに、電子メール により送られます。このメッセージタイプの場合にのみ、 4 番目のパラメータである extra_headers が使われます。 * 2\\ このオプションは存在しません。 * 3\\ message は destination で指定されたファイルに追加されます。 明示的に指定しない限り、message の 最後には改行文字は追加されません。 * 4\\ message は、直接 SAPI のログ出力ハンドラに送信されます。 * destination\\ メッセージの送信先。その設定は、上で説明している message_type パラメータの値によります。 * extra_headers\\ 追加のヘッダ。message_type パラメータが 1 に設定される場合に利用されます。 このメッセージタイプは、 mail() と同様に 内部関数を利用します。 <code> <?php // データベースに接続できない場合、 // サーバーログを通してエラーを通知する。 if (!Ora_Logon($username, $password)) { error_log("オラクルのデータベースが使用できません!", 0); } // FOO に失敗したら、管理者に email で通知する if (!($foo = allocate_new_foo())) { error_log("大変です。FOO に失敗しました!", 1, "operator@example.com"); } // これ以外の error_log() のコール方法: // ※ファイルに出力する場合は、そのファイルが存在していてアクセス権があること error_log("大変だ!"."\n", 3, "/var/tmp/my-errors.log"); </code> ===== 2次元配列を1次元配列に ===== <code> $array = array_map('array_shift', $array); </code> e.g. mysqlから条件に一致するレコードのnameカラムを取得。1次元配列に変換する。 test.php <code> <?php // mysqlから取得した結果サンプル $array[0]["name"]="taro"; $array[1]["name"]="jiro"; $array[2]["name"]="hanako"; print_r($array); // 1次元配列に $array=array_map('array_shift',$array); print_r($array); </code> <code> # php -f test.php Array ( [0] => Array ( [name] => taro ) [1] => Array ( [name] => jiro ) [2] => Array ( [name] => hanako ) ) Array ( [0] => taro [1] => jiro [2] => hanako ) </code> ===== 指定したスクリプトをメインスクリプトの実行前、実行後に動作させる ===== メインスクリプト実行前にタイマースタート、実行後にタイマーストップで時間計測、とか、 スパム対策のフィルタをメインスクリプト実行前に仕掛けてスパムをはじく、とか e.g. php.iniの場合 <code> ; Automatically add files before PHP document. ; http://php.net/auto-prepend-file auto_prepend_file = /home/user/www/start_script.php ; Automatically add files after PHP document. ; http://php.net/auto-append-file auto_append_file = /home/user/www/end_script.php </code> e.g. .htaccessの場合 <code> php_value auto_prepend_file "/home/user/www/start_script.php" php_value auto_append_file "/home/user/www/end_script.php" </code> ===== 配列をCSVに出力 ===== <code> <?php $fileName = 'test.csv'; $fileName = mb_convert_encoding($fileName, 'SJIS-WIN'); header('Content-Type: application/x-csv'); header("Content-Disposition: attachment; filename=$fileName"); $fp = fopen('php://output', 'w'); $users=array(); $users[1]['name'] = 'suzuki'; $users[1]['mail'] = 'suzuki@mail.com'; $users[2]['name'] = 'saitou'; $users[2]['mail'] = 'saitou@mail.com'; $users[3]['name'] = 'tanaka'; $users[3]['mail'] = 'tanaka@mail.com'; foreach ($users as $row) { mb_convert_variables('SJIS-WIN', mb_internal_encoding(), $row); fputcsv($fp, $row); } fclose($fp); </code> ===== PHPからMySQLへデータをインポート ===== <code> <?php $file = '"C:/temp/hoge.txt"'; //DB接続 $sv = "localhost"; $dbname = "userID_dbName"; $user = "userid"; $pass = "hogehoge"; $conn = mysql_connect($sv, $user, $pass) or die("connエラー"); mysql_select_db($dbname) or die("db_selectエラー"); mysql_query("SET NAMES utf8"); //CSVデータの取り込み $sql = "LOAD DATA LOCAL INFILE '$file' INTO TABLE userID_dbName.tableName"; $sql .= " LINES "; $sql .= " TERMINATED BY '\r\n' "; $sql .= " IGNORE 1 LINES"; $result = mysql_query($sql, $conn); if (!$result) { $message = 'Invalid query: ' . mysql_error() . "\n"; $message .= 'Whole query: ' . $sql; die($message); } </code> ===== ファイルを読み込んで末尾から表示する ===== <code> <?php $file = file('log.txt'); rsort($file); foreach($file as $row){ echo $row; } </code> file : http://php.net/manual/ja/function.file.php rsort : http://php.net/manual/ja/function.rsort.php ===== 標準出力制御(バッファリング) ===== <code> <?php // ログの取得有無 '1,2,3,4,5,6,7,8,9,10 define("LOG_BIT", '0, 0,0,0,0,0,0,0,0,0,1' ); // 処理タイプ $byType = htmlspecialchars($_REQUEST['type']); // ログの取得有無 $LogBit = explode(',',LOG_BIT); // 処理タイプがLOG_BITの範囲内で、且つ「1」であれば処理する if ( array_key_exists($byType,$LogBit) && $LogBit[$byType] == 1 ) { // 出力制御開始 ob_start(); // 標準出力(echoされるべき内容)取得 $result = ob_get_contents(); // 出力制御終了 ob_end_clean(); // ログ出力 ~処理内容、echoの内容などをDBなりファイルなりに出力する処理~ // Output echo $result; } </code> ===== cliで環境変数セットしたい ===== たとえば、メール受信時にPHPプログラムを実行しようとして、任意の環境変数を設定したい。 ⇒コマンドラインで -d の引数で auto_prepend_file に環境変数を記述したファイルを指定する。 /var/www/env.php <code> <?php putenv("APP_ENV=production"); </code> /var/www/regist <code> "| /usr/bin/php -d auto_prepend_file=/var/www/env.php -f /var/www/regist.php >> /tmp/postfix 2>&1" </code> /etc/aliases <code> ~省略~ regist: :include:/var/www/regist </code> /etc/postfix/main.cf <code> # Allowed to run :include: method in /etc/aliases allow_mail_to_commands = alias, forward, include </code>
php/tips.txt
· 最終更新: 2025/02/16 13:53 by
127.0.0.1
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ