サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
php1st.com
WordPressのテンプレートで特定のカスタム投稿タイプのときだけ処理を実行したい場合、is_singleを使った条件分岐を思い付きますがうまく利きません。 次の例では、「おすすめ店」を管理する「shops」というカスタム投稿タイプのときだけ何かを表示するため、is_singleで条件分岐を作成しています。 if (is_single('shops')) { …何かを表示する… } 非常に紛らわしいので注意してください。is_single自体には投稿とカスタム投稿が含まれますが、「is_single(カスタム投稿タイプ)」という書式ではありません。「is_single(ID・スラッグまたはタイトル)」になります。 if (is_single(ID・スラッグまたはタイトル)) { …何かを表示する… } この使い方は、特定の投稿を識別する用途になります。 次の使い方はうまくいきません。 i
従来からあるdate関数などの日付・時刻関数は、32ビットコンピュータでは2038年頃に限界がきます。「PHP入門」という点では今すぐ大問題になるわけではありませんが、実社会ではもう少し早く問題が発生する場合があります。 <?php for ($i = 2147483640; $i < 2147483650; $i++) { echo date("Y/m/d H:i:s", $i) . "<br />"; } ?> ○実行結果 2038/01/19 12:14:00 2038/01/19 12:14:01 2038/01/19 12:14:02 2038/01/19 12:14:03 2038/01/19 12:14:04 2038/01/19 12:14:05 2038/01/19 12:14:06 2038/01/19 12:14:07 1901/12/14 05:45:52 1901
記事や固定ページを作成して「プレビュー」をクリックしたときに、「下書きをプレビューする権限がありません」と表示されて入力内容の確認ができない場合、次のようにすると解消できます。 解決策1:WordPressアドレスとサイトアドレスを確認する 「設定」‐「一般」メニューでWordPress アドレス(URL)とサイトアドレス(URL)を確認します。2つのドメインが違っていると、このエラーが発生する場合があります。 ▼「下書きをプレビューする権限がありません」になるパターン WordPress アドレス(URL) — xxxxx.sakura.ne.jp/example サイトアドレス(URL) — example.com 次のように、WordPressアドレスとサイトアドレスが同じドメインになるように修正します。 ▼アドレスの修正後 WordPress アドレス(URL) — example
isset関数とempty関数は共に変数に何か入っているか調べる関数です。空でないことを確認して、次の処理に進むときに使います。詳しくは、以下のページをご覧ください。 ○PHPマニュアル [manual func=”empty”] — 変数が空であるかどうかを検査する [manual func=”isset”] — 変数がセットされていること、そして NULL でないことを検査する <?php $value = "テスト"; if (isset($value)) { echo "中身は入っています"; } else { echo "空です"; } ?> ○実行結果 中身は入っています empty関数も同じように変数が空でないかどうかを確認することができます。 <?php $value = "テスト"; if (!empty($value)) { echo "中身は入っています"; } el
「Duplicate entry ‘1’ for key ‘PRIMARY’」エラーは、データベース(テーブル)に入力しようとしたデータの主キー(idフィールドなど)がすでに使われていることを示しています(重複不可のため)。 エラーの再現 現在、idフィールドには1から5までが使われています。
phpMyAdminの「特権」メニューでrootユーザーのパスワードを設定した直後は、次のようなエラーメッセージが表示されてphpMyAdminを使えなくなる場合があります。 MySQL サーバに接続しようとしましたが拒否されました。config.inc.php のホスト、ユーザ名、パスワードが MySQL サーバの管理者から与えられた情報と一致するか確認してください これは、phpMyAdminの設定ファイル(config.inc.php)にも上記のパスワードを設定する必要があるためです。phpMyAdminのインストール先(例:C:xamppphpMyAdmin)にあるconfig.inc.phpを開いて次のように設定してください(rootユーザーのパスワードを「abcd1234」に設定した場合)。 $cfg['Servers'][$i]['auth_type'] = 'config'
WordPress関数のthe_contentもget_the_contentも、ページの本文を取得する関数です。違いは、the_contentは本文を画面に表示するのに対して、get_the_contentは変数などに本文を返します。いったん変数に取得して加工してから画面に表示したい場合に役立ちます。 $content = get_the_content(); もう1つの違いは、get_the_contentは本文をそのまま取得するだけですが、the_contentは取得した本文にフィルターフックが適用されます。具体的には次のようなコード(wp-includes/post-template.php)です。 $content = apply_filters( 'the_content', $content ); これにより、自動整形(wpautop)が適用されたり、ショートコードが置き換え
$_POSTや$_GET(フォーム入力値やURLパラメータ)から値を受け取る処理でよく発生します。原因は、そのスクリプトへの初回アクセス時と2回目以降のアクセスで処理を切り分けていないことが考えられます。たとえば、「送信する」ボタンをクリックした後にフォーム入力値を受け取るスクリプトの場合、そのスクリプトに最初にアクセスしたときは$_POSTには何も入っていないので、このエラーメッセージが表示されます。 <?php echo $_POST["test"]; ?> 対処方法として、「$_POST[“test”]に値が入っているときは…」という条件を設定する方法があります。 <?php if (isset($_POST["test"])) { echo $_POST["test"]; } ?> これにより、初回アクセス時は$_POSTを参照しないので、エラーメッセージは表示されなくなります。
作成するカレンダーのイメージ ※以下の内容は[php1st]の「3-4 スケジュール帳(P.192~)」から、カレンダーの作成に関する内容を抜粋して再構成したものです。 カレンダーを作る目的が「最終的には予約システムを作りたい」という方は、WordPressの方が簡単に解決できます(基本機能はノンプログラミングで完成できます)。以下の記事にまとめましたので参考にしてください。 WordPressプラグイン「MTS Simple Booking C」による予約システムの作成 これから、次のようなカレンダーを作成します。簡単すぎず難しすぎず、PHPの基礎が習得できたか力試しになり、スケジュール帳や予約への応用など、今後の学習の展望も見えてきます。ざっとPHPの基礎を習得した方は、ぜひ、チャレンジしてみてください。 ポイントは2つあります。1つは行列形式のレイアウトの作成方法、もう1つは、そのレ
WordPress 54 view WordPressテーマの「while (have_posts()) : the_post();」の意味は? WordPressテーマを開いてカスタマイズしようとすると、 よく「while (have_posts()) : the_post();」というコード(PHPスクリプト)を見かけます。 以下、解説していきますが、全文を読むのが面倒な方のために意味だけ先に書きます。このコードは、 WordPressデータベースから取り出した投稿・固定ページを1件ずつ表示していく(1ページに10件表示など) という意味です(あくまでおおざっぱな説明ですが)。 それぞれの命令は、 while → 処理を繰り返す構文 have_posts() → 次の記事があるか調べる the_post() → 次の記事を取得する という役割を果たします。 これによって、「次の記事があ
原因1:存在しないURLを参照したとき Twitterと連携するPHPスクリプトでfile_get_contents関数を使うことも少なくありませんが、この関数では、指定したURLが存在しない場合はWarning(警告)が表示されます。次の例では、検索したユーザーが存在しないのでWarning(警告)が表示されます。 <?php $url = "https://api.twitter.com/1/users/show.json?screen_name=nisi9981"; $json = file_get_contents($url); echo $json; ?> ○実行結果 Warning: file_get_contents(https://api.twitter.com/1/users/show.json?screen_name=nisi9981) [function.file-g
phpMyAdminでテーブルを選択し「SQL」メニューからSQL文を入力しようとすると、SELECT文の末尾に「WHERE 1」というWHERE句が付いています。 WHERE句はデータを抽出するときの条件で、「WHERE id = 100」(idフィールドが100のデータを抽出)のように使います。 「WHERE 1」は、無条件で全データを返す条件として使われます。 前置きが長くなりましたが、「WHERE 1」は、何も条件を指定せずに実行するSELECT文と同じ結果になります。つまり、 SELECT * FROM `table1` WHERE 1 は、「WHERE 1」を取り除いた次のSELECT文と同じということです。 SELECT * FROM `table1` 「WHERE 1」が邪魔に思える方のために先に書いておくと、「WHERE 1」を削除しても問題ありません。 なぜ「WHERE
配列に指定要素が含まれるか検索する定番の関数がin_array関数です。以下は配列に「田中次郎」が含まれるか検索しています。 <?php $array = array("鈴木一郎", "田中次郎", "高橋史郎"); if (in_array("田中次郎", $array)) { echo "存在します"; } ?> ○実行結果 存在します in_array関数では検索する指定文字列に正規表現を使うことができません。正規表現を使って配列検索を行う場合はpreg_grep関数が役立ちます。 <?php $array = array("鈴木一郎", "田中次郎", "高橋史郎"); if (preg_grep("/^田中/", $array)) { echo "存在します"; } ?> ○実行結果 存在します この例では「正規表現が使えるin_array関数」のイメージで配列要素の存在チェック
WordPressで子テーマを作成して、子テーマの中にfunctionを記述するときによく発生します。 Fatal error: Cannot redeclare twentytwelve_wp_title() (previously declared in C:\xampp\htdocs\ … \wp-content\themes\child\functions.php:10) in C:\xampp\htdocs\ … \wp-content\themes\twentytwelve\functions.php on line 9999 エラーメッセージの意味は、「同じ関数は2度定義できない」という意味です。 たとえば、テーマにあるtwentytwelve_wp_title関数を子テーマでカスタマイズする場合、子テーマのfunctions.phpにもtwentytwelve_wp_tit
intの「11」は入力可能サイズではなく表示する桁数のこと phpMyAdminで作成したテーブルの構造を確認すると、列のデータ型(種別)にint(11)やvarchar(50)のように、数値が付加されていますが、数値系の列と文字列系の列では意味が異なります。 varchar(50) — 文字列で定義した列に設定されるvarchar(50)の「50」は、この列に格納できる文字数を示しています。 int(11) — 数値で定義した列のint(11)の「11」は、列に入力可能な桁数の制限ではありません。列を表示するときのサイズです。数値列の属性で「UNSIGNED ZEROFILL」(符号なしで前ゼロを埋める)を選択した場合に、「00000000123」のように前にゼロを埋めて数値を表示するときの桁数を示しています。結論は、int(11)の「11」は、設定した覚えがなくても特に気にする必要はな
mb_send_mail関数で送信したメールが文字化けする主な原因は次のようなものがあります。 内部処理で使う文字コードが設定されていない メールの言語(日本語)が設定されていない 送信者やCCの日本語がエンコードされていない それぞれについて説明します。 1. 内部処理で使う文字コード → mbstring.internal_encodingで設定 mb_send_mail関数で送信したメールが文字化けする場合は、php.iniのmbstring.internal_encodingの設定が原因かもしれません。たとえば、スクリプトの文字コードがUTF-8で、php.iniのmbstring.internal_encodingがEUC-JPの場合は、mb_send_mail関数で送信したメールは「???????」のように文字化けします。 解決方法として、php.iniのmbstring.in
実行したスクリプトが次のように文字化けすることがあります。 対策はいくつかあります。いずれかの方法をお試しください。 (1) php.iniでdefault_charsetを設定 php.iniのdefault_charsetでは、既定の文字コードを指定することができます。現状はコメントになっていると思います。コメントを外して任意の文字コードを指定します。 ○現在の設定 ;default_charset = “iso-8859-1” ○変更後の設定 default_charset = “utf-8” (2) スクリプトの先頭でheader関数を実行 スクリプトの先頭でheader関数を実行して文字コードを指定することもできます。応急処置的な対応ですが、確実にそのページの文字化けは解消するはずです。 <?php header("Content-Type: text/html; charset
原因1:タイムゾーンの設定が間違っている date関数で表示した時刻が正しく表示されない場合は、タイムゾーン(地域ごとの時間帯)の設定が原因かもしれません。たとえば、タイムゾーンの設定が東京ではなく欧米などになっていると、現在の時刻が9時なのに、date関数を実行すると2時や5時などと表示されてしまいます。XAMPPをインストールして何も設定していない場合は、「date.timezone = Europe/Berlin」などと設定されている可能性があります。 次のようなエラーメッセージが表示されることもあります。「タイムゾーンを設定してください」という意味です。 —————————— Warning: date() [function.date]: It is not safe to rely on the system’s timezone settings. You are *requ
定義していない変数の値をechoなどで表示しようとすると表示されるエラーメッセージです。たとえば、スクリプトの先頭で「echo $a;」と記述すると表示されます。次のようなコードです。 <?php echo $a; これは$aという変数を定義していないのに表示しようとしたためです。 ただし、このエラーはスクリプトの動作が止まってしまうほど重大ではないので、とりあえず非表示にすれば解決するケースがほとんどです。 具体的には.htaccessに次のように記述するのが最も簡単です。 php_value error_reporting 0 これにより、.htaccessを配置したディレクトリ(サブディレクトリ含む)以下のPHPスクリプトでNoticeエラーが表示されなくなります。 上記の設定では全てのエラーが非表示になりますが、Noticeエラーのみを非表示にしたい場合は、次の記事を参考にしてくだ
次のコードはMySQLのデータを一覧表示していますが、MySQL設定ファイル(my.iniまたはmy.cnf)に文字コードの定義をしていないなどの原因で、文字化けすることがあります。 <html> <head> <title>PDOを使用してデータを表示する</title> </head> <body> <h3>PDOを使用してデータを表示する</h3> <?php // データベースに接続する $dsn = "mysql:dbname=testdb;host=localhost;"; $conn = new PDO($dsn, "nisi", "qazxsw"); // データを取り出す $sql = "SELECT id, nam, pre, ag FROM table1 ORDER BY id"; $stmt = $conn->prepare($sql); $stmt->execut
WordPressでPHPの編集時に「Fatal error: Cannot redeclare …」と表示されて画面が真っ白(HTTP 500 エラー)になることがあります。ここでは、WordPressユーザーの目線から「Fatal error: Cannot redeclare …」が起きる理由や対処法を紹介していきます。 WordPressで「Fatal error: Cannot redeclare …」が起きる原因 「Fatal error: Cannot redeclare …」とは「関数が二重定義になっているため処理を停止する」という意味です。「関数の二重定義」の意味は後で説明するとして、WordPressでこのエラーが起きる原因の多くがfunctions.phpの修正ミスです。 たとえば、親テーマのfunctions.phpからすべてのコードをコピーして子テーマのfunct
XAMPPでインストールしたApacheが起動しない場合、Apacheを起動する80というポート番号が他のアプリケーションで使われていることが考えられます。 以下のいずれかの対策をとることで、Apacheを起動できるようになります。 ポート80で実行されているプログラムの確認 まずは、コマンドプロンプトからnetstatコマンドを実行して、どのポートで何が実行されているか確認します。 ポート80ではプロセスID(PID)2240のプロセスが実行中だとわかります。タスクマネージャを起動して「プロセス」タブからPID2240のプロセスを確認します(PID列がない場合は、「表示」-「列の選択」から「PID」を選択してください)。 ※当該番号のプロセスが一覧されない場合は、「全ユーザーのプロセスを表示する」をクリックしてみてください。 ポート80でスカイプ(skype.exe)が実行されていること
スクリプトから表示されるエラーメッセージのうち、「Notice: Undefined variable」などのNoticeエラーだけを非表示にしたい場合、php.ini、PHPスクリプト、.htaccessのいずれかに次のように記述する方法があります。「E_ALL & ~E_NOTICE」は、Notice以外のすべてのエラーメッセージを表示するという設定です。 error_reporting = E_ALL & ~E_NOTICE <?php error_reporting(E_ALL & ~E_NOTICE); ?> php_value error_reporting 30711 よくあるPHPの落とし穴を予習したい方におすすめの本 この記事のように同じPHPの設定でも書く場所によって記述が違う場合があります。これはPHP入門時によく出会う落とし穴で、自分では正しい記述をしているつもりで
phpMyAdminにログインできない場合、次のような原因が考えられます。 ●原因1:パスワードの変更後、config.inc.phpを修正していない phpMyAdminの設定ファイル(config.inc.php)に「$cfg[‘Servers’][$i][‘auth_type’] = ‘config’;」と設定されている場合、この設定ファイルに記述されたユーザー名、パスワードを使ってphpMyAdminを実行するようになっています。 つまり、phpMyAdminのユーザーメニュー(特権メニューなど)からユーザーのパスワードを変更した後は、それに合わせてconfig.inc.phpも修正する必要があります。 【関連記事】パスワード設定後にphpMyAdminが実行できなくなったとき ●原因2:rootユーザーのパスワードを忘れてしまった phpMyAdminにログインできない単純な原因
次のページ
このページを最初にブックマークしてみませんか?
『PHPプログラミングの教科書 [php1st.com]』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く