最近では、スマホでインターネットをする人が多くなり同じURLにアクセスしてもモバイルとパソコンが違ったレイアウトで表示されるのは当たり前となってきました。 この間公開したソースコードを表示するツール「凝」ではIphoneとPCを切り替えて取得できるようにしていましたが、file_get_contents()やfile()でただ取得するだけでは切り替えることはできません。 前者は文字列として、後者は配列としてファイルを取得してくれますが、特に理由がない場合僕はfile()を使ってます。 今回のように、ヘッダー情報を送るときはHTTPプロトコルのコンテキストの記述から、stream_context_create()でコンテキストリソースを作成します。stream_context_create()を利用し、file_get_contents()の引数とすることでアクセスするときのヘッダー情報を書
はじめに phpで日付関連のこと調べると、手続き型の方法が検索上位に来てあまり手続き型で書きたくないなーと思ったので、DateTimeクラスを使った日付関連のことを個人メモ的にまとめた。 サンプル 現在日時を作成 $date = new DateTime(); echo $date->format('Y-m-d H:i:s'); // 2014-08-06 21:15:49 // 文字列から $date = new DateTime('2014-08-01 23:01:05'); echo $date->format('Y-m-d H:i:s'); // 2014-08-01 23:01:05 // 数値から $date = new DateTime(); $date->setDate(2014,8,1); echo $date->format('Y-m-d H:i:s'); // 201
ヒアドキュメントで、 テキスト出力も自由自在!! EODというIDに挟まれたエリアに入力されたテキストが表示され、しかも改行タグも反映されました。 ヒアドキュメントの構文 <<<開始ID 文字列 終端ID; <<<のあとに開始IDを入れ、最後にも同じ終端IDを入れます。 (上記サンプルでは EOD) IDの命名ルール ヒアドキュメントのID名は、以下のルールに気を付けて命名しましょう。 開始ID、終端IDは必ず同じ名前にする IDはアルファベット大文字・小文字、日本語でもOKだが、アルファベット大文字が基本 数字を先頭にしてはいけない 記号は_(アンダースコア)のみ可 ちなみによくあるID名は以下のとおりです。 EOD(End of Document) EOM(End of Message) EOF(End of File) 上記いずれかのID名を付けるのが一般的です。 ヒアドキュメントで
#はじめに この記事は私のサイト『FantmSite』のブログでこう書いていたのですが、心機一転としてブログを閉鎖し、今後サイトをリニューアルすべくその一つとしてQiitaに移転させています。 #記事の内容 はじめに 最近開発をせずに勉強ばかりしているので書く内容がなかなかないのですが、「【PHP】MySQLに保存しているデータをJSONで吐き出す」という記事は書いたのに、JSONの読み取りについて書いていなかったので、記述しておきたいと思います。 ##JSONデータの例 説明を行うために、まず今回利用するJSONデータの例を示しておきます。 {"res": {"blogData":[ { "id":"0001", "title":"サンプル01", "day":[ { "year":"2015", "month":"03", "_day":"31" } ], "author":"fant
PHPでプログラムから、外部サーバーへのSSHで、コマンドをなげたいケースがある。 そういう際に、知っておくと便利なコマンド「ssh2_connect」 下記はサンプルのPHPプログラムです。 ssh2_connect.php // ssh接続して、ファイルのパーミッションをチェックするサンプル $ok = ""; $ng = ""; $connection = ssh2_connect('192.168.1.1', 22); ssh2_auth_password($connection, 'user', 'pass'); $stream = ssh2_exec($connection, 'echo `ls -l /home/test/call.agi` | cut -d" " -f1'); $errorstream = ssh2_fetch_stream($stream, SSH2_ST
<?php $neko = "neko"; $hako = "nekobako"; if(preg_match("/$neko/",$hako)){ echo "nekoはnekobakoに存在する"; }else{ echo "nekoはnekobakoに存在しない"; }
どれを使えばいいのか exec() を使えばいい。 shell_exec() はリターンコードが取得不能なので不便。 system() はリダイレクトしないと勝手に標準出力へ出力するので不便。 まとめ 関数名 第1引数 第2引数 第3引数 戻値 出力 exec コマンド stdout リターンコード stdout なし shell_exec コマンド - - stdout なし system コマンド リターンコード - stdout あり exec() 第2引数 stdout の注意点 exec() の標準出力は第2引数 stdout へ追加されるので注意。 つまり、連続して exec() を呼び出す場合は第2引数に渡す変数を毎回クリアする必要がある。 非同期実行 exec, shell_exec, system どれでも可能。 以下は exec での例。 exec('filename
PHPでheader()を使ったファイルのダウンロード方法をご紹介します。 ファイル形式と、ファイルサイズの取得、ファイルのリネームの3つを行い、ファイルを読み込むだけで簡単にダウンロード可能です。 よくあるファイルダウンロード時のエラーも紹介しています。
前提 まず、SQL インジェクション対策を含め、脆弱性対策の前提としてなるべく新しい安定版の PHP を利用するようにしてください。 バージョンアップにより脆弱性が解消したり、より安全になっています。 なお、以下の方法は PHP 5.3.7 以上で対応しています。(PHP 5.3.6 でも対応していますが、Windowsの実装が不完全です) ただし、PHP 5.3 系は 2014/8/14 でセキュリティサポートが終了しています。 PDO + 静的プレースホルダを用いた SQL 文発行 PDO を利用する場合、以下のポイントを押さえることで安全に利用出来ます。 1.文字エンコーディングを指定する 2.静的プレースホルダを用いる 3.バインド時に型を指定する それぞれについて、以下に実装方法を説明します。 1. 文字エンコーディングを指定する 期待した文字エンコーディングとして動作するよう、
PHPでデータベースを操作する方法をまとめました。簡易な解説なので、プログラムの日が浅い人は理解できないかもしれません。復習用としてお使いください。 PHPでデータベースを操作する場合は、まずPDOオブジェクトを生成します。この時はコンストラクタでデータベース情報を設定しておきます。 後は、そのPDOオブジェクトのメソッドでデータベースを操作するだけです。今回は、$dbhという変数でPDOオブジェクトを管理しています。 データベース接続に必要な情報 まずはサンプルコードです。 <?php define('DB_HOST', 'DBの場所'); define('DB_NAME', 'DBの名前'); define('DB_USER', 'ユーザー名'); define('DB_PASSWORD', 'パスワード'); // 文字化け対策 $options = array(PDO::MYSQL
【2021/10/15 追記】 この記事は更新が停止されています。現在では筆者の思想が変化している面もありますので,過去の記事として参考程度にご覧ください。PDO に関しては大きく変わっていない部分が多いとは思いますが, PHP 8.x 以降での動作保証はありません。 あらかじめ読んでおきたい記事 Qiita - 【PHP超入門】クラス~例外処理~PDOの基礎 by @7968 初心者がやりがちなミス 以下のどれかに1つでも当てはまるコードは見直す必要があります.付録にリンクを貼っておきましたので,「該当するかも?」という人はクリックして飛んで読んでください.太字にしてあるものは脆弱性に直結する危険度の高いものです. mysql_query などの非推奨関数を利用している SET NAMES あるいは SET CHARACTER SET などで文字コードを指定している そもそもデータベース
photo credit: drewm via photopin cc PHPを触り始めて、また本格的にプログラミングを始める様になって4ヶ月が経ちました。最初はもう読めたものじゃなかったPHPも、やっと読める様に、そして書ける様になってきました。嬉しいものです。そうですOsamuです。 最初にPHPに触れた時、確か1週間とか2週間の頃。もう何が何だかわからなく困っていました。 コードを読んでみても何しているかわからないし、データがどこにインプットされて、どこで処理されて、どんな形でアウトプットされているのか。頭が混乱したものです。 そんな時に私を助けてくれたのが、以下の2つ関数でした。 ・die() ・print_r() 恐らく中級者以上のPHPプログラマーには当たり前の関数でしょう。しかし、この関数本当に使えます。PHP初心者はまず関数die()と、print_r()を多用する事を覚え
プログラミング日誌 プログラミングに関することを書いていたのは大昔になってしまった>< 今は中年の雑記ブログです。 仕事とか気になったことを書こうと思います。 言語:PHP 始めてPHPのparse_ini_file関数を使ったので、忘れないように書き留めておこう。 1. parse_ini_file関数 この関数は、php.iniと同じ構造のiniファイルを読み込んで、その内容を連想配列で返すものです。 array parse_ini_file( string $filename, bool $process_sections, integer $scanner_mode ) 2. 引数 filename 読み込むiniファイル名。 process_sections セクションを区別する場合はtrue、そうでない場合はfalse。 省略可能。デフォルトではfalse。 scanner_m
mod_rewriteとは Apacheのモジュールのひとつで、アクセスURLを正規表現で書き換えることができます。リダイレクト処理を行うのに便利なモジュールです。 モジュールの解説ドキュメントによれば URLを操作するためのスイス製のアーミーナイフ と例えられるほど、非常に複雑な処理を行えます。 URLからURLへ、同一サーバ内URLだろうが、別サーバURLだろうが問いません。 引数を含む動的URLを通常のHTMLファイルのような静的URLに見せることも可能です。 素晴らしく詳細なマニュアルもありますが、機能が多いだけに情報量が多く読むのも面倒だと思いますので、ここでは、mod_rewriteを使用すると便利な場面を想定して具体的に解説してみたいと思います。 mod_rewriteの基本 ひとまず、mod_rewriteはApacheのモジュールです。インストールされていなければ、サーバ
PHPでXMLのデータを解析する XMLをパースする XML形式についてはPHPの関数でsimplexml_load_stringという関数があります。 これはXML文書をパースしてオブジェクト化してくれる関数だそうです。 $xml = file_get_contents('http://blog.kzno.net/feed/'); $xmlObject = simplexml_load_string($xml); ただ、これだけだと比較する時や引数として値を渡したいときにオプジェクトとして扱うためうまくいきません。 引数として使用する場合は(string)で文字列にキャストしてやると幸せになれます。
タイトルの通り、ある文章の中に特定の単語(複数)が含まれるかどうかを チェックする機能が欲しくていろいろ調べていました。 掲示板やブログコメントのNGワードチェックのような用途です。 軽く調べても、自分でも思いつくような正攻法しか見つからず… 参考:[PHP][疑問]ある文字列が、複数のキーワードのうち一つでもマッチするか判定する方法について - HappyQuality http://www.happyquality.com/2012/02/04/1959.htm 自分で作ったのは下記のような感じです。(方法A) 単語リストをひたすらforeachで回して文章中を検索、引っ掛かればアウト。 (今回はNGワードに該当=だめ なので、参考サイトとは判定が逆です) $text = "こんにちはhoge"; // 文章 $word_list = array("hoge", "fuga"); //
この記事は賞味期限切れです。(更新から1年が経過しています) PHPで外部のリソースを取得するのに大変便利なfile_get_contents関数ですが、 cURLの環境があるなら利用したほうがパフォーマンスがいいぞというお話。 パフォーマンスの差 具体的にどれくらいパフォーマンスが変わるのかというと… モバイル回線のノートでYahoo!のトップページを取得してざっくり計測したところ、 file_get_contents : 4秒前後 cURL : 2秒前後 概ねこんな感じとなりました。 勿論時間帯や回線など様々な要因にもよりますが、 ちょっと無視出来ない数字ですね。 簡単な使い方 cf) PHP: cURL – Manual curl_init()で初期化 curl_setopt()でオプションを設定して curl_exec()で実行 curl_close()で終了 というのが一連の流れ
DB内にあるサイト情報のリンクのチェックを行いたく、質問しています。 リンク切れチェックにはいくつかやり方があると思いますが、最適な方法が判断できません。 ざっと思いつくのは 0. ヘッダーに404が返ってくるものをリンク切れと判断する 0. ヘッダーに200が返ってくるものをリンクが存在していると判断する 0. コンテンツを入手して、title等があるかチェックする 等ですが、問題点もそれぞれ多そうです。。。 需要もありそうなので検索してみたのですが、「最適」と言えそうな解に辿りつけませんでした。 一般的にはどのようなやり方で実現するのでしょうか? 可能であれば考慮点も合わせてご教示いただけると幸いです。 想定している利用環境は ・php 5.6 ・フレームワーク codeigniter 3.0 です。 よろしくお願いします。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く