【PHP】文字列を連結しようとしたらエラーがでる。。
すごいくだらないことを書きますよ・・?
PHPで文字列連結しようとしたら、下記のようなエラーが出てしまったんですよ。
↓
「A non well formed numeric value encountered」
「 A non-numeric value encountered」
なぜかというと「+」で連結しようとしていたから。
//こんな書き方はない! $str = "ほげ" + "はげ"; //これが正しい! $str = "ほげ" . "はげ";
javascriptと間違えてときどきやってしまう、アホな失敗。
【PHP】xmlのタグの中の文字列をエスケープするよ!
xmlの中に「&」とか「<」とか「>」みたいな文字列が入っていると、simplexml_load_string()で読み込んだときにエラーしてしまいます!
そんなときはpreg_replace()で文字をエスケープして読み込んであげましょう!
下記は「< title >・・・&・・・・< /title >」みたいに書かれたタグの中を「< title >・・・& amp;・・・・< /title >」と置き換えてエスケープしています!
$content = file_get_contents('./hogehoge.xml'); //&をエスケープ $content = preg_replace('/<title>(.+?)&(.+?)<\/title>/', '<title>>$1&$2</title>', $content); $rss = simplexml_load_string($content);
これでsimplexml_load_stringでちゃんとxmlが読めるね~!
以上!
【AWS】Wordpressをhttps化!リダイレクトがトップページにしか効かない…。
サーバはAWS(アマゾン)を使っていて、前方にあるロードバランサーでhttpsを終端して、webサーバはhttpのレスポンスを処理するという、定番の構成です。
このとき、webサーバの「.htaccess」に、こんな感じでリダイレクト設定を書きますよね?
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !=https RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R,L] </IfModule>
このリダイレクトがトップページでしか有効にならずにちょっと悩んでしまいました…。
原因は、上記の設定を書く位置が悪かったです。
リダイレクト設定は、他の設定よりも一番上側に書いたほうがいいですね。
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !=https RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R,L] </IfModule> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
これでトップページ以外にも、ちゃんとリダイレクトが反映されます。
以上です!
【Wordpress】「functions.php」をいじってテストテンプレートを表示する!
ワードプレスで functions.php にコードを追加して、テストテンプレートを表示させる仕組みを作ります。
つまり、どういう事かと言うとですね・・。
①「http://hogehoge.com/」というサイトがあったとします。
②ここに「http://hogehoge.com/test_page/」みたいなテスト表示用のディレクトリを追加します(トップページの配下に追加します)
③この「/test_page/」にアクセスすると、自分が現在調整しているテンプレート(sample.php)を表示することできます。
こういうことがやりたい訳ですよ・・。
コードは以下です。これを「functions.php」に追加します。
add_action('init', 'add_test_page'); function add_test_page(){ add_rewrite_endpoint('test_page', EP_ROOT); flush_rewrite_rules(); } add_filter('query_vars', 'add_query_vars'); function add_query_vars($vars){ $vars[] = "test_page"; return $vars; } add_action('template_redirect', 'test_template_redirect'); function test_template_redirect() { global $wp_query; if (isset($wp_query->query['test_page'])) { include_once('sample.php'); exit; } }
これで「sample.php」をテスト表示することができます。
訳あって管理画面にアクセスできない人がテストページのデザイン修正するときに、この方法が使えると思います。
ところで、上記の「flush_rewrite_rules()」ですが、あまり連続的に呼び出すと、とても負荷が大きく、いろいろ不具合をもたらすのだそうな。
だから呼ぶのは一度だけでいいです。一回ページをロードしたら、下記のようにコメントアウトしてしまうといいと思います。
/* add_action('init', 'add_test_page'); function add_test_page(){ add_rewrite_endpoint('test_page', EP_ROOT); flush_rewrite_rules(); } */ add_filter('query_vars', 'add_query_vars'); function add_query_vars($vars){ $vars[] = "test_page"; return $vars; } add_action('template_redirect', 'test_template_redirect'); function test_template_redirect() { global $wp_query; if (isset($wp_query->query['test_page'])) { include_once('sample.php'); exit; } }
テスト確認が終わったら上記コードは消してしまいましょう。
(最後にもう一度「 flush_rewrite_rules()」を呼んで、追加した情報を消して元通りにしてあげるといいかも)
以上!
【MYSQL】GETパラメーターやハッシュタグが付いたURLを集計する!
MYSQLが苦手な私が難問に直面しました・・
「GETパラメーター(?)」とか「ハッシュタグ(#)」とかが付いたURLってあるじゃないですか。
こんな感じのやつです。
http://hogehoge.com/page/1
http://hogehoge.com/page/1?param=123
http://hogehoge.com/page/1#chapter1
これらをみんな同じURLとみなして、SQLのCOUNTで集計をするというものです。
結論からいうとこんな感じのクエリでいけました。
SELECT url, COUNT(*) AS click_count FROM test_tabel GROUP BY SUBSTRING_INDEX(SUBSTRING_INDEX(url, '#', 1), '?', 1);
内側の「SUBSTRING_INDEX(url, '#', 1)」で、まずはURLのハッシュタグ(#)より前の部分を抜き出します。
続いて外側の「「SUBSTRING_INDEX(url, '?', 1)」」で、URLのGETパラメータ(?)より前の部分を抜き出します。
「#」や「?」が付いてないURLも、そのまま合算して集計されます。
もっとかっこいいやり方があるかもしれないけど、ちゃんと動いてるみたいだしこれでいいか。
以上です・・。
【Vagrant】packageコマンドを叩いてもboxが生成されないゾ!
VirtualBoxとVagrantの環境をほかのPCにコピーしようと思って、packageコマンドを叩いたのですが、「package.box」というファイルが生成されない・・。
参考ブログ:
vagrant + virtualboxで作ったRuby環境を他のPCに環境移行する方法 - Qiita
これは何故かというと、コマンドプロンプトの管理者権限の問題でした・・。
ウィンドウズのコマンドプロンプトを、右クリックで「管理者として実行」で開いたら、ちゃんとboxファイルを生成してくれた・・。
なんと初歩的なトリック・・。ほんとうっかりさんなんだから・・。数時間くらい時間を無駄にしちゃったゾ、テヘッ(はぁと)