- 投稿日:2020-01-15T21:15:34+09:00
[PHP]クラスのプロパティーのDocコメントのannotaionの取得
前提
c#のattribute的な書き方をしたい
作ったもの
PropertyのDocCommentにhiddenがあったら、
<input type="hidden" name="{property-name}" value="{property-value}"/>を返します。
実装
まずは値を格納するだけのクラス。
ViewModelを想定しました。class ExampleViewModel extends ViewModel{ /** * 返す * @hidden true */ public $hidden_prop; /** * 返さない * @oden */ public $not_hidden_prop; /** * 返さない * @hidden false */ public $false_hidden_prop; /** * 返す * @hidden true */ public $hidden_prop2; // 返さない public $no_annotation; function __construct(){ $this->hidden_prop = '1'; $this->not_hidden_prop = '2'; $this->not_hidden_prop = '3'; //$hidden_prop2 valueがない時も返します $this->no_annotation = '5'; } }お次はhtmlを作成するクラスです。
class HtmlHelper{ /** * '@hidden true'が付いたプロパティーを * input tag のHTMLタグとして返す。 * * @param ViewModel $class * @return string */ public function getInputHiddenTags(ViewModel $class){ // クラスからプロパティーを取得 $reflection = new \ReflectionClass($class); $properties = $reflection->getProperties(); $input_hidden_tags = ''; // ぐるぐる foreach($properties as $property){ // プロパティーのコメントを取得します // 下記コメントいただいた通り修正しました、ありがとうございます // $reflection_property = new \ReflectionProperty($class, $property->name); // $doc = $reflection_property->getDocComment(); $name = htmlspecialchars($property->name, ENT_QUOTES, 'UTF-8'); $value = htmlspecialchars($class->$name, ENT_QUOTES, 'UTF-8'); // 正規表現の極み if(preg_match('/\@hidden true\s*\n/', $doc)){ $name = $property->name; $value = $class->$name; $input_hidden_tags .= <<<HTML <input type="hidden" name="${name}" value="${value}" /> HTML; } } return $input_hidden_tags; } }まとめ
必要あらばアノテーション判定部分を切り出します。
参考
https://www.php.net/manual/ja/class.reflectionclass.php
https://www.php.net/manual/ja/class.reflectionproperty.php
- 投稿日:2020-01-15T20:37:15+09:00
Laravel で MySQLのTime型の最大値を超えて集計する
やりたいこと
MySQLのTime型は
'-838:59:59' から '838:59:59'
にまでしか対応していません。なので仮にDBに○○した時間をtime型で保存し、合計を取り出そうとすると上限に当たる可能性がありませす
集計方法
MySQLのTime_TO_SEC関数を使います。
その名の通りこれは、Timeを秒数に直してくれます。
秒数に直したものを合計し、それを取得します。取得した秒数をPHPでHH:MMに整形してあげれば、上限を超えた状態になります。
TestController.phppublic function summary() { $user = User::selectRaw('SUM(TIME_TO_SEC('sleep_time')) as total_sleep_time') ->where('name','太郎') ->first(); $time = $user->total_sleep_time; // HH:MM sprintf('%02d:%02d', ($time / 3600),($time / 60 % 60)) }
- 投稿日:2020-01-15T15:43:02+09:00
EC-CUBE セキュリティチェックリスト
内容は随時アップデートしています。ぜひストックしてください。
この資料は、公式に発表されたセキュリティチェックリストの補足です。
【初心者向け】EC-CUBEを安全運用・セキュリティ対策講座 | EC-CUBE名古屋 vol.74 にて詳細をお話しする予定です。
※マークは最優先でチェックすること
2系
※ data 以下のファイル、フォルダが公開されていないか
EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/data など)に data フォルダが公開されていないかご確認ください。
data/Smarty/templates/default/site_frame.tpl などにアクセスし、ファイルの中身が表示されないことをご確認ください。
data 以下のファイルの中身が表示されてしまった場合
data フォルダに .htaccess というファイル名で、以下の内容を保存してください。
order allow,deny deny from all保存した後、ファイルの中身が表示されないことをご確認ください。
それでも表示されてしまう場合は、 こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。
install 以下のファイル、フォルダが存在するか
EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/install など)に install フォルダが存在するかご確認ください。
install フォルダが存在する場合
通常の運用では使用しないプログラムが含まれています。
install フォルダを削除してください。
test 以下のファイル、フォルダが存在するか
EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/test など)に test フォルダが存在するかご確認ください。
test フォルダが存在する場合
通常の運用では使用しないプログラムが含まれています。
test フォルダを削除してください。
tests 以下のファイル、フォルダが公開されていないか
EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/tests など)に tests フォルダが存在するかご確認ください。
tests フォルダが存在する場合
通常の運用では使用しないプログラムが含まれています。
tests フォルダを削除してください。
管理画面の URL を変更した際に、標準の admin フォルダが残存していないか
管理画面の URL を標準の admin から変更した場合、 admin フォルダが残っていないことをご確認ください。
admin フォルダが残っている場合
使用しなくなったプログラムが含まれています。 admin を削除してください。
3系
※ app が公開されていないか
EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/app など)に app フォルダが公開されていないかご確認ください。
app/console などにアクセスし、ファイルの中身が表示されないことをご確認ください。
※ app 以下のファイルが公開されている場合
app フォルダに .htaccess というファイル名で、以下の内容を保存してください。
order allow,deny deny from all保存した後、ファイルの中身が表示されないことをご確認ください
それでも表示されてしまう場合は、 こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。
※ vendor が公開されていないか
EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/vendor など)に vendor フォルダが公開されていないかご確認ください。
vendor/symfony/config/README.md などにアクセスし、ファイルの中身が表示されないことをご確認ください。
※ vendor 以下のファイルが公開されている場合
vendor フォルダに .htaccess というファイル名で、以下の内容を保存してください。
order allow,deny deny from all保存した後、ファイルの中身が表示されないことをご確認ください
それでも表示されてしまう場合は、 こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。
install.php が存在するか
EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/install.php など)に install.php が存在するかご確認ください。
install.php が存在する場合
通常の運用では使用しないプログラムが含まれています。
install.php を削除してください。
tests 以下のファイル、フォルダが公開されていないか
EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/tests など)に tests フォルダが存在するかご確認ください。
tests フォルダが存在する場合
通常の運用では使用しないプログラムが含まれています。
tests フォルダを削除してください。
index_dev.php が存在するか
EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/index_dev.php など)に index_dev.php が存在するかご確認ください。
index_dev.php が存在する場合
開発用途で使用するプログラムが含まれています。
本番環境では、 index_dev.php を削除してください。
4系
※ var が公開されていないか
EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/var など)に var フォルダが公開されていないかご確認ください。
var/cache/prod/annotations.map などにアクセスし、ファイルの中身が表示されないことをご確認ください。
※ var 以下のファイルが公開されている場合
var フォルダに .htaccess というファイル名で、以下の内容を保存してください。
order allow,deny deny from all保存した後、ファイルの中身が表示されないことをご確認ください。
それでも表示されてしまう場合は、 こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。
※ .env が公開されていないか
EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/.env など)に .env ファイルが公開されていないか、ファイルの中身が表示されないことをご確認ください。
.env ファイルの中身が表示されてしまう場合
EC-CUBE をインストールしたフォルダの .htaccess ファイルに以下の内容を追加し、保存してください。
<FilesMatch "^composer|^COPYING|^\.env|^\.maintenance|^Procfile|^app\.json|^gulpfile\.js|^package\.json|^package-lock\.json|web\.config|^Dockerfile|\.(ini|lock|dist|git|sh|bak|swp|env|twig|yml|yaml|dockerignore)$"> order allow,deny deny from all </FilesMatch>保存した後、 .env ファイルの中身が表示されないことをご確認ください。
それでも表示されてしまう場合は、 こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。
codeception が公開されていないか
EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/codeception など)に codeception フォルダが存在するかご確認ください。
codeception フォルダが存在する場合
通常の運用では使用しないプログラムが含まれています。
codeception フォルダを削除してください。
開発(dev)モードになっていないか
.env ファイルや、 .htaccess ファイルに設定されている
APP_ENV
の値が dev になっていないかご確認ください。
APP_ENV=dev になっている場合
開発用途で使用する設定になっています。
本番環境では、APP_ENV
を prod に設定してください。
全バージョン共通
SSLが導入されているか
EC-CUBE に https:// からの URL でアクセスできるかご確認ください
https:// からの URL でアクセスできない場合
常時SSLの導入をご検討ください。
導入方法がわからない場合は、 こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。
公表された脆弱性が修正されているか
EC-CUBE脆弱性リスト にアクセスし、対象バージョン のフォームにご利用の EC-CUBE のバージョンを入力し、脆弱性対応が済んでいるかご確認ください。
ご利用の EC-CUBE のバージョンは、管理画面のトップページでご確認可能です。
修正方法がよくわからない場合は、こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。
管理画面のユーザーID/パスワードが推測されやすいものになっていないか
以下のような例に該当する場合は、推測されにくいユーザーID/パスワードに変更しましょう
- ユーザーIDとパスワードが同じ
- ユーザーIDが admin など推測されやすいもの
- パスワードが8文字以下
- パスワードが数字のみ、英字のみ
古いバージョンの EC-CUBE では、ユーザーIDに記号が使用できない場合があります。
修正方法がわからない場合は、こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。
管理画面が推測しやすい URL になっていないか
管理画面の URL が admin など推測しやすい URL になっていないことをご確認ください。
2.11 以降のバージョンでは、 管理画面から admin 以外に変更可能です。
また、 IP アドレスの制限などもセキュリティの強化には有効ですので、併わせてご検討ください。
パーミッション777のファイル、フォルダが存在しないか
パーミッションが 777 となっているファイル、フォルダが存在しないことをご確認ください
パーミッション777のファイル、フォルダが存在する場合
ファイルは 604、 フォルダは 705 など、ご利用のサーバーでの適切なパーミッションに変更してください。
テンプレートや、画像フォルダなど、Webサーバーから書き込みが必要な場合は、ファイル: 606、フォルダ: 707など、書き込み許可が必要な場合があります。
この場合は、セキュリティのリスクが向上しますのでご注意ください。
パーミッション666のファイルが存在しないか
パーミッションが 666 となっているファイルが存在しないことをご確認ください
パーミッション666のファイルが存在する場合
ファイルは 604 など、ご利用のサーバーでの適切なパーミッションに変更してください。
テンプレートなど、Webサーバーから書き込みが必要な場合は、606 など、書き込み許可が必要な場合があります。
この場合は、セキュリティのリスクが向上しますのでご注意ください。
API が有効になっていないか
2系の場合は、EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/api など)にアクセスし、ページが見つかりません もしくは、 API機能が無効です。 と表示されることをご確認ください。
「API機能が無効です。」と表示する場合でも、完全に削除してしまった方が安全です。
html/api フォルダを完全に削除してください。3系の場合は、 EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/api/v0/product など)にアクセスし、 ページが見つかりません と表示されることをご確認ください。
API が有効になっている場合
適切にアクセス制限がかかっているかご確認ください。
よくわからない場合は、こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。
html を別のフォルダ名(www, public_html など)に変更されていないか
サーバーによっては、 EC-CUBE 標準の公開フォルダである html が使用できない場合があります。
html 以外のフォルダ名に変更されている場合は、前出の2系、3系、4系のチェックリストを今一度ご確認ください。
user_data 以下に CSV ファイルが存在しないか
user_data フォルダ以下に CSV ファイルが存在しないかご確認ください。
存在する場合は削除してください。
upload 以下に CSV ファイルが存在しないか
upload フォルダ以下に CSV ファイルが存在しないかご確認ください。
存在する場合は削除してください。
他の CMS と同居している場合, バージョン(本体, プラグイン)は最新か
WordPress など、他の CMS を同時にインストールしている場合、最新バージョンが導入されているかご確認ください。
最新バージョンでは無い場合は、最新バージョンにバージョンアップしてください。
他のフリーCGIを使用していないか
フリーで配布されている CGI を使用していないかご確認ください。
EC-CUBEは機密情報を扱いますので、フリーで配布されている CGI との同時利用はおすすめしません。
独自テンプレートでエスケープ漏れなど無いか
テンプレートを独自にカスタマイズされている場合、フォームの input タグなどにエスケープ漏れが無いかご確認ください。
特に2系の場合は、 value 属性に h が付与されていることをご確認ください。
<!-- value に h が付与されているのを確認 --> <input type="text" name="<!--{$key1}-->" value="<!--{$arrForm[$key1].value|h}-->" />
独自カスタマイズ, プラグインで eval を使用している箇所は無いか
独自カスタマイズ、プラグインのソースを検索し、 eval 関数を使用している箇所は無いかご確認ください。
eval 関数の使用は推奨しません。
よくわからない場合は、こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。
独自カスタマイズ, プラグインで serialize/unserialize を使用している箇所は無いか
独自カスタマイズ、プラグインのソースを検索し、 serialize/unserialize 関数を使用している箇所は無いかご確認ください。
serialize/unserialize 関数の使用は推奨しません。
よくわからない場合は、こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。
独自カスタマイズ, プラグインで SQL を実行する際, プレースホルダを使用しているか
独自カスタマイズ、プラグインのソースを検索し、適切にプレースホルダを使用しているかご確認ください。
以下のように変数を直接 SQL に渡している場合は要注意です
$sql = "SELECT * FROM dtb_products WHERE product_id = '".$product_id."';";ここに書いてあることがよくわからない場合は
こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。
こちらもあわせてご覧ください
TODO
あと、セキュリティの面から言うと、デザイン管理画面は使わない方がいいです。
— ?大河内健太郎?? (@nanasess) January 9, 2020
Webサーバーの権限で、テンプレートに書き込み許可されているのはリスクになりえます。
VPS やクラウドをお使いの方は、 デザイン管理画面を使用できなくしてしまって、Webサーバーから書き込めないようにした方が安全公式から出ているチェックリストに、
— ?大河内健太郎?? (@nanasess) January 9, 2020
> 購入確認画面等に覚えのない JavaScript が設置されていないか
ってあるけど、 jQuery に偽装したファイルが設置されていたこともあります。
難読化されていて、プロでも一見見分けがつきません。
不安な方はお気軽にご相談くださいhttps://t.co/YAzZJkfGX4tpl ファイルを Webサーバーからは読み取り専用のパーミッション(604)にして、デザイン管理画面を使わない運用にするのも効果あると思います。
— ?大河内健太郎?? (@nanasess) January 14, 2020
この場合、テンプレートの修正は FTP や SSH など Webサーバーとは別のユーザー権限で行いますWordPress など、他の CMS と同居している場合は、2系に関わらず3系、4系でも注意が必要です。
— ?大河内健太郎?? (@nanasess) January 14, 2020
今後、イタチごっこになり標的が変わる可能性があります。
- 投稿日:2020-01-15T15:12:22+09:00
【PHP】コマンドでPHPファイルを任意のPHPバージョンを指定して実行する。
- 投稿日:2020-01-15T14:37:08+09:00
【WordPress会員機能】WP-Membersプラグインで登録時にメール認証(ダブルオプトイン方式)を実装する方法
WordPressで会員サイトを構築するとなると、プラグインの候補がある程度絞られてきます。
中でも導入数が多く、日本語ドキュメントも充実しているのが、『WP-Members Membership Plugin』。
登録時のフィードのカスタマイズができることや、ユーザーによるプロイフィール編集ができるなど、基本的な会員機能が一通り備わっており、使い勝手が良いのですが、どうしても仕様上欲しかったのが、新規登録時のメール認証。
- フォームに入力して新規登録
- 確認メールが届く
- メールにある本登録URLをクリック
- 本登録完了
と言った、動きを実装するべく調べていたところ、公式サイトにドキュメントを発見。
Send new user an activation link in the new registration emailしかし、この方法をそのまま実装してもいろいろ間違っているようで、うまく動きませんでした。
(メールに値を不要する際、フィールドにない値は取れないこと、['toggle']がnewmodとなっているが新規登録時はnewregでないとダメなど。あと、本登録してなくてもログイン出来るなど、あくまでサンプルレベルのソースでした。)いろいろとカスタマイズを加えることで実装が実現しましたので、以下その内容をまとめます。
管理画面より、アクティベーションキー用のhiddenフォームを追加
管理画面、設定>WP-Membersを開き、フィールドタブ、フィールドの追加をクリックし、新しくフィールドを追加します。
今回は「activation_key」と言う名前にしています。値はなんでも構いません。function.phpにフィルター・アクションフックを記入
function.php/** * 各種設定が変更できるヘルパー関数 * (設定やテキストの変更は全てこの関数でできます) */ function my_activation_key_settings() { $settings = array( 'email_text' => '本登録はこちら: ',// メールに含めるテキスト 'return_url' => home_url('/user/'),// 登録完了時のリダイレクト先 'send_welcome' => false,// 本登録時ウェルカムメールを送信するか 'show_success' => true,// 完了メッセージを表示するか 'success_message' => '本登録が完了しました。<br>サイトをお楽しみください',// 完了メッセージ 'send_notify' => false,// ユーザー登録時に管理者へ通知メッセージを送信 ); return $settings; } /** * 登録時にアクティベーションキーを作成 */ add_filter( 'wpmem_register_form_before', 'my_generate_key' ); function my_generate_key() { // ランダムなキーを発行 $key = md5( wp_generate_password()); // jQueryに渡す(jQueryでhiddenタグに入力している) return '<script> jQuery(function($){ var php = {key:"'.$key.'"}; functionTest(php.key); }); </script>'; } /** * 登録時メールにアクティベーションキーを追加 */ add_filter( 'wpmem_email_filter', 'my_add_key_to_email', 10, 3 ); function my_add_key_to_email( $arr, $wpmem_fields, $field_data ) { $settings = my_activation_key_settings(); $url = trailingslashit( $settings['return_url'] ); // 新規登録に対してのみ実行 if ( $arr['toggle'] == 'newreg' ) { // 保存されたキーを取得 $key = get_user_meta( $arr['user_id'], 'activation_key', true ); // メール本文にテキストを追加 $arr['body'] = $arr['body'] . "\r\n" . $settings['email_text'] . add_query_arg( 'activate', $key, $url ); } return $arr; } /** * アクティベーションキーを確認・存在する場合は、ユーザーを検証してログインします。 */ add_action( 'template_redirect', 'my_validate_key' ); function my_validate_key() { $settings = my_activation_key_settings(); // アクティベーションキーをチェック if ( isset( $_GET['activate'] ) ) { // キーの対象となるユーザーアカウントを取得 $users = get_users( array( 'meta_key' => 'activation_key', 'meta_value' => $_GET['activate'], 'number' => 1, 'count_total' => false ) ); if ( $users ) { foreach( $users as $user ) { // 指定されたアクティベーションキーが有効、ログイン実行 wp_set_auth_cookie( $user->ID, true ); wp_set_current_user( $user->ID ); // activation_keyメタを削除し、アクティブに設定 delete_user_meta( $user->ID, 'activation_key' ); update_user_meta( $user->ID, 'active', '1' ); if ( $settings['send_welcome'] ) { // ヘルパー関数の値がtrueならウェルカムメールを送信 wpmem_inc_regemail( $user->ID, '', 2 ); } if ( $settings['send_notify'] ) { // ヘルパー関数の値がtrueなら通知メールを送信 global $wpmem; wpmem_notify_admin( $user->ID, $wpmem->fields ); } break; } } } } /** * 本登録完了メッセージ表示 */ add_filter( 'the_content', 'my_show_thankyou_on_activation', 100 ); function my_show_thankyou_on_activation( $content ) { $settings = my_activation_key_settings(); if ( $settings['show_success'] && isset( $_GET['activate'] ) ) { // 依存関係をロード $content = wpmem_inc_regmessage( '', $settings['success_message'] ) . $content; } return $content; } /** * ログイン実行時、アクティベーションしていないユーザーの場合強制ログアウト */ add_filter( 'wpmem_login_redirect', 'my_login_redirect', 10, 2 ); function my_login_redirect( $redirect_to, $user_id ) { $type = get_user_meta( $user_id, 'active', true ); if($type != '1') { wp_logout(); } // ログインページへリダイレクト return home_url( '/login/' ); }jQueryで関数を用意
登録フォームのページにjavascriptを設置します。
jQueryを使い、hiddenタグにアクティベーションキーを挿入しています。sample-script.jsfunction functionTest($arg) { jQuery('input[name="activation_key"]').val($arg); }以上で、メールにアクティベーションURLが届くようになりました。
- 投稿日:2020-01-15T12:38:01+09:00
Visual Studio Codeを使用してPHPのデバッグを行う方法(備忘録)
visual studio codeを使用して、phpのデバッグを行う事にしたが、数日間試行の上、やっと解決したので備忘録として記載します。
phpを使用する目的として、webサーバー用に組み込む事を前提に記載します。
Xampは、用いず、Apache24をインストールし、binにて、httpdで立ち上げる方法を取ります。
Visual Studio Code, php74はインストール済との前提で記載します。<?php $a = "abcd"; $b = "efgh"; $c = $a.$b; echo $c; ?>上記の様な簡単なプログラムに、ブレークポイントを付け、Step Inが出来る事を目的とします。
このコードは、Apachee24のhtdocsに、hello.phpとして保存して置きます。この様なステップイン出来る状態にするためは、このサイトにある様に、下記の作業が必要です。
scriptを修正するためには、歯車を押します。「launch.json」が表示あれます。{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "extensionHost", "request": "launch", "name": "Launch Extension", "runtimeExecutable": "${execPath}", "args": [ "--extensionDevelopmentPath=${workspaceFolder}" ], "outFiles": [ "${workspaceFolder}/out/**/*.js" ], "preLaunchTask": "npm" }, { "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal" }, { "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9000, "stopOnEntry": true, "pathMappings": { "C:\\Apache24\\htdocs": "${workspaceRoot}" } }, { "name": "Launch currently open script", "type": "php", "request": "launch", "program": "${file}", "cwd": "${fileDirname}", "port": 9000, } ] }私は、pythonもデバッグするので、上記、コードには、pythonのjsonコードも含まれています。
このサイトでは、xampでを指定していますが、下記の通り修正しています。
注意事項として、 "C:\Apache24\htdocs": とする必要があります。¥と¥を2回続けて記載する取り決めになっています。"stopOnEntry": true, "pathMappings": { "C:\\Apache24\\htdocs": "${workspaceRoot}"さらに、php.iniの追記も必要です。
[xdebug] zend_extension = C:\php74\ext\php_xdebug-2.9.0-7.4-vc15-x86_64.dll xdebug.remote_enable = 1 xdebug.remote_autostart = 1 xdebug.remote_connect_back = 1 xdebug.remote_port = 9000ここで、虫の絵を押し「Launch currently open script」を選択し、ブレイクポイントを設定し、緑色の三角矢印を押すとデバッグが始まります。
以上です。
修正のご要望があれば、ご連絡下さい。
- 投稿日:2020-01-15T10:29:05+09:00
Declaration of <クラス名>::<メソッド名> should be compatible with <クラス名>::<メソッド名>
状況
phpunitのsetUp()メソッドを設定した時に、タイトルのエラーが発生
エラー内容と対象方法
setUp()メソッドは親クラスのメソッドをオーバーライドしているのですが、
オーバーライド元とオーバーライド先でメソッドの引数または戻り値が異なる場合にエラーが発生します。この場合、親クラスの戻り値が以下の通りvoidとなっているため、
オーバーライド先でも同様の指定が必要となります。TestCase.php/** * Setup the test environment. * * @return void */ protected function setUp(): void { if (! $this->app) { $this->refreshApplication(); } $this->setUpTraits(); foreach ($this->afterApplicationCreatedCallbacks as $callback) { $callback(); } Facade::clearResolvedInstances(); Model::setEventDispatcher($this->app['events']); $this->setUpHasRun = true; }
- 投稿日:2020-01-15T09:24:21+09:00
Wordpressと静的コンテンツを共存させる方法
WordPressのトップにあるindex.phpを確認。
初期設定通りであれば、
wp-blog-header.php
を参照するように設定されているはず。index.phpドキュメントルート/wp/index.php /** Loads the WordPress Environment and Template */ require( dirname( __FILE__ ) . '/wp/wp-blog-header.php' );wordpressが読み込む順番は、
index.php→wp-blog-header.phpなので、index.phpと同じ階層に表示させたいコンテンツを配置することで、
1. 静的コンテンツを配置したディレクトリ
2. wp-blog-header.php
の順番に参照します。ここで1つ問題なになるのが、
Wordpressと静的コンテンツのディレクトリが重複してしまう場合です。例)
WordpressのURL
https://sample.com/test/
静的コンテンツとして表示させたいURL
https://sample.com/test/landingこの場合、ディレクトリ配下にindex.phpと同様に、
wp-blog-header.phpにリダイレクトさせることで解決できます。
※基本はindex.phpをコピーしてパスの設定を修正するだけで大丈夫です。cp index.php test/index.php 相対パスの設定を修正【注意事項】
直接参照させているだけなので、ファビコンは表示されません。
僕の場合は、結局WordPressのテーマに静的ファイルを入れ込む形で実装しました。