<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PHP  |  takeHo（たけほ）のへなちょこ台帳</title>
	<atom:link href="https://blog.takeho.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.takeho.com</link>
	<description>いわゆる自由帳ってところです。</description>
	<lastBuildDate>Tue, 09 Dec 2025 01:28:26 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6</generator>

<image>
	<url>https://blog.takeho.com/wp-content/uploads/2024/08/icon-150x150.png</url>
	<title>PHP  |  takeHo（たけほ）のへなちょこ台帳</title>
	<link>https://blog.takeho.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>PHP8 時代の WordPress は“知らないと壊れる”—2025 年からの互換性チェック完全ガイド</title>
		<link>https://blog.takeho.com/wordpress-in-the-php-8-era-what-you-must-know-to-avoid-breakagethe-complete-compatibility-check-guide-for-2025-onwards/</link>
					<comments>https://blog.takeho.com/wordpress-in-the-php-8-era-what-you-must-know-to-avoid-breakagethe-complete-compatibility-check-guide-for-2025-onwards/#respond</comments>
		
		<dc:creator><![CDATA[たけほ]]></dc:creator>
		<pubDate>Wed, 19 Nov 2025 11:11:00 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[プラグイン]]></category>
		<guid isPermaLink="false">https://blog.takeho.com/?p=1435</guid>

					<description><![CDATA[2025 年現在、WordPress を運用している企業・個人サイトの多くが「いつか突然サイトが壊れる」リスクを抱えています。その最大の理由が、PHP の急速なバージョンアップと互換性問題です。特に、PHP 8.1／8. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>2025 年現在、WordPress を運用している企業・個人サイトの多くが「いつか突然サイトが壊れる」リスクを抱えています。その最大の理由が、PHP の急速なバージョンアップと互換性問題です。特に、PHP 8.1／8.2／8.3 が主流となった現在、WordPress 本体は最新 PHP に対応している一方で、テーマ・プラグイン・独自コードが追従できていないケースが圧倒的に多くなってきました。</p>



<p>そして怖いのは、これらの互換性問題の多くが“普段は気付かないまま進行している”という点です。ある日サーバ会社が PHP を 7.4 → 8.2 にバージョンアップした瞬間、管理画面が真っ白になり、企業サイトが全停止する。そのような事故が 2024〜2025 年にかけて急増しています。</p>



<p>本記事では、WordPress を安全に運用するために必須となる「PHP8 時代の互換性チェック項目」を、可能な限り丁寧に、そして実務者の視点で深く掘り下げて解説します。単に「アップデートしましょう」という表面的な話ではなく、実際の現場で何が起きているのか、そしてどう見抜き、どう改善すればよいのかを詳細に解説します。</p>



<p>この記事は、WordPress の開発者だけでなく、企業サイトの運用者、制作会社、フリーランスのエンジニア、または「自社サイトが突然壊れた」経験を持つ方にもきっと役に立つでしょう。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2"><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">PHP8 で最初に起きる WordPress 障害とは？</a></li><li><a href="#toc2" tabindex="0">PHP8 時代の WordPress 互換性チェック（総合フルリスト）</a><ol><li><a href="#toc3" tabindex="0">チェック 1：WordPress バージョンは最新か？</a></li><li><a href="#toc4" tabindex="0">チェック 2：テーマが PHP8 に対応しているか？</a></li><li><a href="#toc5" tabindex="0">チェック 3：functions.php に独自の危険コードが混ざっていないか？</a></li><li><a href="#toc6" tabindex="0">チェック 4：プラグインの更新停止期間は？</a></li><li><a href="#toc7" tabindex="0">チェック 5：Deprecated（非推奨）警告が出ていないか？</a></li><li><a href="#toc8" tabindex="0">チェック 6：WP_DEBUG を有効にしたことはあるか？</a></li><li><a href="#toc9" tabindex="0">チェック 7：サイトの PHP バージョンは固定か？</a></li></ol></li><li><a href="#toc10" tabindex="0">PHP8 への移行で“確実に壊れやすいコード”とは？</a><ol><li><a href="#toc11" tabindex="0">未定義の配列アクセス</a></li><li><a href="#toc12" tabindex="0">bool が勝手に int に変換されるコード</a></li><li><a href="#toc13" tabindex="0">null を渡してしまうコード</a></li><li><a href="#toc14" tabindex="0">非推奨関数の使用</a></li><li><a href="#toc15" tabindex="0">暗黙の型変換</a></li><li><a href="#toc16" tabindex="0">WordPress の古いフック書き方</a></li></ol></li><li><a href="#toc17" tabindex="0">“壊れる前に”やるべき実務的対策</a></li><li><a href="#toc18" tabindex="0">これからの WordPress 運用に必須のマインドセット</a></li><li><a href="#toc19" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">PHP8 で最初に起きる WordPress 障害とは？</span></h2>



<p>PHP7 系から 8 系への移行で最も多いトラブルは、「非推奨関数の削除」や「型の厳格化」などによる Fatal error です。以下が代表的な症状です。</p>



<ul class="wp-block-list">
<li>サイトが真っ白になり何も表示されない</li>



<li>管理画面に入れず wp-admin が 500 error を吐く</li>



<li>ContactForm7, Elementor, WooCommerce が突然動かない</li>



<li>テーマの functions.php が致命的エラーを起こす</li>



<li>json_decode や mbstring 系の関数で Warning → Fatal へ昇格</li>



<li>旧式の MySQL API（mysql_*）が完全に削除され落ちる</li>
</ul>



<p>これらは「古いテーマ」「古いプラグイン」「独自に書かれた修正コード」が原因で起きることがほとんどです。</p>



<p>特に企業サイトでは、5 年前・10 年前に制作したテーマがいまだに稼働しているケースが多く、そこに埋め込まれた古い書き方が PHP8 で完全に非互換になっていることがよくあります。</p>



<p>PHP8 時代に突入した今、WordPress サイトを運用するなら、まずは「何が危険なのか」を具体的に知る必要があります。</p>



<h2 class="wp-block-heading"><span id="toc2">PHP8 時代の WordPress 互換性チェック（総合フルリスト）</span></h2>



<p>ここでは、PHP8 で WordPress サイトを安全に動かすために必要なチェックをすべて網羅します。これらの項目を順に確認することで、ほぼすべての互換性問題を把握できます。</p>



<h3 class="wp-block-heading"><span id="toc3">チェック 1：WordPress バージョンは最新か？</span></h3>



<p>WordPress 本体は PHP8.3 に対応しています。しかし、古い WordPress（5.9 以下）では PHP8 に対応しきれていないため、エラーが多発します。</p>



<ul class="wp-block-list">
<li>WordPress コアは <strong>最低でも 6.x 系</strong> にしておく</li>



<li>テーマ／プラグインは古い WP で作られていると互換性が低い</li>
</ul>



<p>WordPress 本体のアップデートを怠っている場合は、互換性リスクが非常に高くなります。特に 5.x 時代のテーマをそのまま使っているサイトは危険です。</p>



<h3 class="wp-block-heading"><span id="toc4">チェック 2：テーマが PHP8 に対応しているか？</span></h3>



<p>企業サイトで最も問題を起こすのが「独自テーマの古さ」です。以下を含むテーマは要注意です。</p>



<ul class="wp-block-list">
<li>2018 年以前に作られたテーマ</li>



<li>header.php や footer.php の構造が古い</li>



<li>create_function を使っている</li>



<li>get_theme_mod の使い方が古い</li>



<li>isset より先に配列参照して notice を出す</li>



<li>undefined offset が頻繁に出る</li>
</ul>



<p>テーマ開発者の中には、WordPress 5.0 以前の書き方に固執したまま、PHP 7 時代の知識で制作したケースも多く、それが PHP8 で致命的エラーを引き起こします。</p>



<h3 class="wp-block-heading"><span id="toc5">チェック 3：functions.php に独自の危険コードが混ざっていないか？</span></h3>



<p>もっとも多いのが「過去に追加されたカスタムコード」が原因の例です。制作会社が去った後、別の担当者がネット記事を見て functions.php にコードを貼り付け、それが PHP8 で動かない…というケースが大量にあります。</p>



<p>要注意コードは次の通りです。</p>



<ul class="wp-block-list">
<li>remove_filter や add_filter の古い文法</li>



<li>PHP7 の古い無名関数の書き方</li>



<li>strtotime の誤った使い方</li>



<li>date 関連の指定ミス</li>



<li>PHP8 から strict になった関数の引数不整合</li>
</ul>



<p>functions.php に知らないコードが入っている場合は、100% 精査すべきです。</p>



<h3 class="wp-block-heading"><span id="toc6">チェック 4：プラグインの更新停止期間は？</span></h3>



<p>プラグインはテーマ以上に互換性問題を引き起こします。</p>



<p>次の条件に当てはまるプラグインは危険です。</p>



<ul class="wp-block-list">
<li>1年以上アップデートされていない</li>



<li>開発者がサポートを中止している</li>



<li>評価が低く、互換性の Issue が報告されている</li>



<li>PHP8 の互換性が公式に保証されていない</li>
</ul>



<p>特に Page Builder 系（Elementor, Divi, WPBakery）は JS・PHP 両方の負荷と互換性問題を抱えがちで、インストール数が多いにも関わらず不具合報告も多い領域です。</p>



<p>WooCommerce も PHP8 でエラーが出やすく、発送設定や支払い関連プラグインとの組み合わせで Fatal になる例も頻繁にあります。</p>



<h3 class="wp-block-heading"><span id="toc7">チェック 5：Deprecated（非推奨）警告が出ていないか？</span></h3>



<p>PHP8 では「Deprecated → Warning → Fatal」への昇格が顕著です。</p>



<p>特に以下の関数は要注意です。</p>



<ul class="wp-block-list">
<li>ereg, eregi 系（完全削除）</li>



<li>split, spliti（完全削除）</li>



<li>mysql_*（完全削除）</li>



<li>create_function（非推奨から削除へ）</li>



<li>implode 引数順逆</li>



<li>mbstring 系で引数が厳格に</li>



<li>filter_var の動作が厳格化</li>
</ul>



<p>多くの WordPress 旧テーマはこれらを内部で使用しているため、PHP8 にアップデートした瞬間、エラーが噴出します。</p>



<h3 class="wp-block-heading"><span id="toc8">チェック 6：WP_DEBUG を有効にしたことはあるか？</span></h3>



<p>多くのサイトでは、「エラーが表示されていないだけ」で内部的には大量の警告が発生しています。</p>



<p>以下を wp-config.php に設定すると、PHP8 non-compat コードが判明します。</p>



<pre class="wp-block-code"><code>define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);</code></pre>



<p>ログに Notice/Warning が出続けている場合は“未来の Fatal error 予備軍”です。</p>



<h3 class="wp-block-heading"><span id="toc9">チェック 7：サイトの PHP バージョンは固定か？</span></h3>



<p>レンタルサーバでは PHP のバージョンを手動で固定していない場合、メンテナンス時に自動的に PHP が上がることがあります。これが企業サイトにおける「突然のサイト停止」の主因です。</p>



<ul class="wp-block-list">
<li>PHP7.4 → PHP8.1（自動アップグレード）</li>



<li>古いテーマが耐えられず管理画面が真っ白</li>



<li>その結果、会社の受付フォームが停止し問い合わせゼロに…</li>
</ul>



<p>このような事故が現実に多発しています。</p>



<h2 class="wp-block-heading"><span id="toc10">PHP8 への移行で“確実に壊れやすいコード”とは？</span></h2>



<p>PHP8 は厳密な型チェックが強化されました。そのため、7 系まで“動いてしまっていた危険コード”が一斉に露出します。以下は特に壊れやすいコードです。</p>



<h3 class="wp-block-heading"><span id="toc11">未定義の配列アクセス</span></h3>



<pre class="wp-block-code"><code>$val = $arr&#91;'key'];</code></pre>



<p>PHP8 はこれを厳しく扱います。。</p>



<h3 class="wp-block-heading"><span id="toc12">bool が勝手に int に変換されるコード</span></h3>



<pre class="wp-block-code"><code>strtotime(false);</code></pre>



<p>これは PHP8 で Fatal になります。</p>



<h3 class="wp-block-heading"><span id="toc13">null を渡してしまうコード</span></h3>



<pre class="wp-block-code"><code>count(null);   // PHP8 では Warning → Fatal の可能性</code></pre>



<p></p>



<h3 class="wp-block-heading"><span id="toc14">非推奨関数の使用</span></h3>



<pre class="wp-block-code"><code>create_function()
ereg()
split()</code></pre>



<p>すべて削除済みです。</p>



<h3 class="wp-block-heading"><span id="toc15">暗黙の型変換</span></h3>



<p>PHP7までは許容されていた曖昧な型変換が PHP8 では Fatal に繋がります。</p>



<h3 class="wp-block-heading"><span id="toc16">WordPress の古いフック書き方</span></h3>



<pre class="wp-block-code"><code>add_filter('the_content', 'myfunc', 999, 1);
function myfunc() {  // 引数ミスマッチ
}</code></pre>



<p>PHP8 では strict になり ArgumentCountError が発生しやすくなります。</p>



<h2 class="wp-block-heading"><span id="toc17">“壊れる前に”やるべき実務的対策</span></h2>



<p>ここからは WordPress サイトを健全に保つための具体的な対策を説明します。</p>



<ol class="wp-block-list">
<li><strong>本番環境のコピーで PHP8 テストを行う</strong><br>いきなり本番で PHP バージョンを上げるのは危険です。<br>かならずステージング（検証環境）でテストします。</li>



<li><strong>テーマのコードレビューを実施</strong><br>functions.php<br>single.php<br>archive.php<br>404.php<br>header/footer/sidebar<br>テンプレート階層<br>独自の shortcodes<br>独自のクラス<br>これらのファイルは数千行に及ぶ場合が多く、プロのエンジニアでも時間がかかります。特に undefined offset、deprecated warnings、引数不一致は丁寧に見直す必要があります。</li>



<li><strong>不要なプラグインを削除</strong><br>動いているから OK ではありません。<br>不要プラグインは将来の大事故要因です。</li>



<li><strong>Page Builder を使うサイトは要注意</strong><br>Elementor<br>Divi<br>WPBakery<br>これらは内部で大量の JS/PHP を利用しているため、互換性・速度・INP 指標の面で問題を起こしやすい領域です。</li>



<li><strong>クラシックテーマからブロックテーマへ移行を検討</strong><br>ブロックテーマは軽量で、PHP8 に最適化されています。企業サイトでは段階移行が現実的です。</li>



<li><strong>ログ監視を必ず行う</strong><br>wp-content/debug.log<br>server error log<br>PHP error log<br>これらに Warning や Notice がある場合、その多くが将来 Fatal に変わる可能性があります。<br></li>
</ol>



<h2 class="wp-block-heading"><span id="toc18">これからの WordPress 運用に必須のマインドセット</span></h2>



<p>2025 年の WordPress は「放置したら壊れる CMS」です。<br>しかし、「正しく向き合えば非常に安定し、高速で、安全な CMS」でもあります。</p>



<p>大切なのは、</p>



<ul class="wp-block-list">
<li>古いテーマやプラグインを延命しない</li>



<li>PHP バージョンアップに備えた準備を怠らない</li>



<li>ブロックテーマやヘッドレス構成など新しい概念を理解する</li>



<li>パフォーマンス（INP 含む）を継続監視する</li>



<li>セキュリティ対策を自動化する</li>
</ul>



<p>これらを徹底することです。</p>



<h2 class="wp-block-heading"><span id="toc19">まとめ</span></h2>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1280" height="853" src="https://blog.takeho.com/wp-content/uploads/2025/11/8934573-1280x853.png" alt="" class="wp-image-1441" srcset="https://blog.takeho.com/wp-content/uploads/2025/11/8934573-1280x853.png 1280w, https://blog.takeho.com/wp-content/uploads/2025/11/8934573-640x427.png 640w, https://blog.takeho.com/wp-content/uploads/2025/11/8934573-768x512.png 768w, https://blog.takeho.com/wp-content/uploads/2025/11/8934573.png 1536w" sizes="(max-width: 1280px) 100vw, 1280px" /></figure>



<p>PHP8 時代の WordPress は、多くのサイトで“互換性崩壊”のリスクを抱えています。しかし正しい手順でチェックを行えば、その多くは事前に痛みなく解決できます。</p>



<p>WordPress は進化している一方で“古い資産と未来技術の間のギャップ”が大きくなり続けています。このギャップを理解し、計画的にテーマとプラグインの見直しを進めることが、2025 年以降の WordPress 運用において最も重要な要素です。</p>



<p>もしあなたのサイトが現在 PHP8 移行に不安を感じているなら、今回のチェックリストを順に確認し、ひとつずつ解決していくことで、将来の大きなトラブルを未然に防ぐことができます。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.takeho.com/wordpress-in-the-php-8-era-what-you-must-know-to-avoid-breakagethe-complete-compatibility-check-guide-for-2025-onwards/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Linuxで始めるローカルLLM ― Ollama導入からPHPサンプル実行まで完全ガイド</title>
		<link>https://blog.takeho.com/getting-started-with-local-llm-on-linux-a-complete-guide-from-ollama-installation-to-php-sample-execution/</link>
					<comments>https://blog.takeho.com/getting-started-with-local-llm-on-linux-a-complete-guide-from-ollama-installation-to-php-sample-execution/#respond</comments>
		
		<dc:creator><![CDATA[たけほ]]></dc:creator>
		<pubDate>Thu, 21 Aug 2025 11:40:00 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[LLaMA]]></category>
		<category><![CDATA[Mistral]]></category>
		<category><![CDATA[Ollama]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[TinyLlama]]></category>
		<guid isPermaLink="false">https://blog.takeho.com/?p=1231</guid>

					<description><![CDATA[目次 まえがきサーバ環境の前提と推奨スペック推奨スペック（快適に動作させる場合）最低限の動作環境（軽量モデルを試す場合）スペック不足時の対応（スワップ設定）Ollamaの導入手順（Linux）インストール動作確認モデルの [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4"><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">まえがき</a></li><li><a href="#toc2" tabindex="0">サーバ環境の前提と推奨スペック</a><ol><li><a href="#toc3" tabindex="0">推奨スペック（快適に動作させる場合）</a></li><li><a href="#toc4" tabindex="0">最低限の動作環境（軽量モデルを試す場合）</a></li><li><a href="#toc5" tabindex="0">スペック不足時の対応（スワップ設定）</a></li></ol></li><li><a href="#toc6" tabindex="0">Ollamaの導入手順（Linux）</a><ol><li><a href="#toc7" tabindex="0">インストール</a></li><li><a href="#toc8" tabindex="0">動作確認</a></li></ol></li><li><a href="#toc9" tabindex="0">モデルの選択と導入</a><ol><li><a href="#toc10" tabindex="0">TinyLlama（軽量・テスト用）</a></li><li><a href="#toc11" tabindex="0">LLaMA 3 8B（実用的・汎用）</a></li><li><a href="#toc12" tabindex="0">Mistral 7B（高精度・実用向け）</a></li></ol></li><li><a href="#toc13" tabindex="0">PHPからOllamaを利用する</a><ol><li><a href="#toc14" tabindex="0">APIサーバの起動</a></li><li><a href="#toc15" tabindex="0">PHPサンプルコード（挨拶プログラム）</a></li></ol></li><li><a href="#toc16" tabindex="0">各モデルのまとめ</a><ol><ol><li><a href="#toc17" tabindex="0">参考情報</a></li></ol></li></ol></li><li><a href="#toc18" tabindex="0">おわりに</a><ol><ol><ol><li><a href="#toc19" tabindex="0">引用元</a></li></ol></li></ol></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">まえがき</span></h2>



<p>近年、AIチャットサービスといえば <strong>ChatGPT</strong> が代表的な存在となっています。クラウド上のサーバで巨大な言語モデルが稼働し、ユーザーはインターネット経由でその恩恵を受ける仕組みです。<br>一方で「<strong>ローカル LLM</strong>」という言葉を耳にすることも増えてきました。これは文字通り「ローカル（自分のPCやサーバ）」で動かす <strong>大規模言語モデル（Large Language Model）</strong> のことを指します。つまり、ChatGPTのような高度なAIを、自分の環境で動かし、インターネットに依存せず利用できる仕組みです。</p>



<p>ローカルでLLMを動かすメリットは以下の通りです。</p>



<ul class="wp-block-list">
<li><strong>プライバシー性</strong><br>入力したデータが外部に送信されない</li>



<li><strong>柔軟性</strong><br>環境に合わせたモデル選択が可能</li>



<li><strong>コスト削減</strong><br>クラウド利用料を気にせず使える</li>
</ul>



<p>本記事では、代表的なローカル LLM 実行環境である <strong>Ollama</strong> をLinuxサーバへ導入し、PHPプログラムから「挨拶」を返す簡単なサンプルを動かすまでの手順を解説します。<br>さらに、サーバのスペックが不足する場合に有効な <strong>スワップ領域の設定</strong> についても紹介し、実用的に利用できるようにします。</p>



<h2 class="wp-block-heading"><span id="toc2">サーバ環境の前提と推奨スペック</span></h2>



<p>まずはサーバのスペックを確認します。LLMはメモリやCPUに大きな負荷をかけるため、環境によって動作可否が分かれます。</p>



<h3 class="wp-block-heading"><span id="toc3">推奨スペック（快適に動作させる場合）</span></h3>



<ul class="wp-block-list">
<li>CPU：8コア以上</li>



<li>メモリ：16GB以上</li>



<li>ストレージ：SSD 50GB以上</li>



<li>GPU：あれば望ましいが必須ではない</li>
</ul>



<h3 class="wp-block-heading"><span id="toc4">最低限の動作環境（軽量モデルを試す場合）</span></h3>



<ul class="wp-block-list">
<li>CPU：4コア</li>



<li>メモリ：8GB</li>



<li>ストレージ：SSD 20GB</li>
</ul>



<h3 class="wp-block-heading"><span id="toc5">スペック不足時の対応（スワップ設定）</span></h3>



<p>メモリが不足している場合は「スワップ領域」を確保することで、物理メモリの代わりにディスクを仮想メモリとして利用できます。</p>



<pre class="wp-block-code"><code># スワップファイルの作成（例：8GB）
sudo fallocate -l 8G /swapfile

# 権限設定
sudo chmod 600 /swapfile

# フォーマットして有効化
sudo mkswap /swapfile
sudo swapon /swapfile

# 永続化（/etc/fstabに追記）
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab</code></pre>



<p>これで、物理メモリが不足していても大きめのモデルを動かすことが可能になります。</p>



<h2 class="wp-block-heading"><span id="toc6">Ollamaの導入手順（Linux）</span></h2>





<a rel="noopener" href="https://ollama.com" title="Ollama" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://ollama.com/public/og.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Ollama</div><div class="blogcard-snippet external-blogcard-snippet">Get up and running with large language models.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://ollama.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">ollama.com</div></div></div></div></a>




<p>Ollamaは、簡単にローカルでLLMを動かせる実行環境です。</p>



<h3 class="wp-block-heading"><span id="toc7">インストール</span></h3>



<p>Ubuntuを例にします。</p>



<pre class="wp-block-code"><code>curl -fsSL https://ollama.com/install.sh | sh</code></pre>



<p>これで <code>ollama</code> コマンドが使えるようになります。</p>



<h3 class="wp-block-heading"><span id="toc8">動作確認</span></h3>



<pre class="wp-block-code"><code>ollama run hello</code></pre>



<p>このコマンドで「Hello」という軽量モデルが動作し、正常に応答が返れば成功です。</p>



<h2 class="wp-block-heading"><span id="toc9">モデルの選択と導入</span></h2>



<p>Ollamaは複数のモデルを提供しています。本記事では <strong>3種類のモデル</strong> をピックアップし、それぞれの特徴と導入方法を紹介します。</p>



<h3 class="wp-block-heading"><span id="toc10">TinyLlama（軽量・テスト用）</span></h3>



<ul class="wp-block-list">
<li><strong>特徴</strong>：非常に軽量で、メモリ8GB以下でも動作可能</li>



<li><strong>利用シーン</strong>：動作確認やテスト用</li>
</ul>



<p>導入コマンド：</p>



<pre class="wp-block-code"><code>ollama pull tinyllama</code></pre>



<p>実行例：</p>



<pre class="wp-block-code"><code>ollama run tinyllama</code></pre>



<h3 class="wp-block-heading"><span id="toc11">LLaMA 3 8B（実用的・汎用）</span></h3>



<ul class="wp-block-list">
<li><strong>特徴</strong>：Meta社が公開したLLM。8Bパラメータで性能と軽量性のバランスが良い</li>



<li><strong>利用シーン</strong>：実用的な会話や文章生成</li>
</ul>



<p>導入コマンド：</p>



<pre class="wp-block-code"><code>ollama pull llama3</code></pre>



<p>実行例：</p>



<pre class="wp-block-code"><code>ollama run llama3</code></pre>



<h3 class="wp-block-heading"><span id="toc12">Mistral 7B（高精度・実用向け）</span></h3>



<ul class="wp-block-list">
<li><strong>特徴</strong>：文章生成性能が高く、多くの利用者に支持されている</li>



<li><strong>利用シーン</strong>：文章作成、コード補助など本格利用</li>
</ul>



<p>導入コマンド：</p>



<pre class="wp-block-code"><code>ollama pull mistral</code></pre>



<p>実行例：</p>



<pre class="wp-block-code"><code>ollama run mistral</code></pre>



<h2 class="wp-block-heading"><span id="toc13">PHPからOllamaを利用する</span></h2>



<p>OllamaはHTTP APIを提供しているため、PHPから簡単に呼び出せます。</p>



<h3 class="wp-block-heading"><span id="toc14">APIサーバの起動</span></h3>



<pre class="wp-block-code"><code>ollama serve</code></pre>



<p>これで <code>http://localhost:11434</code> が利用可能になります。</p>



<h3 class="wp-block-heading"><span id="toc15">PHPサンプルコード（挨拶プログラム）</span></h3>



<pre class="wp-block-code"><code>&lt;?php
// モデルを指定してリクエスト
$url = "http://localhost:11434/api/generate";
$data = &#91;
    "model" => "llama3", // 利用するモデル
    "prompt" => "こんにちは！自己紹介してください。"
];

$options = &#91;
    "http" => &#91;
        "header"  => "Content-type: application/json\r\n",
        "method"  => "POST",
        "content" => json_encode($data),
    ],
];

$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);

// 結果を表示
echo "AIの返答: " . $result;
?></code></pre>



<p>ブラウザからこのPHPファイルにアクセスすると、指定したモデルが「こんにちは！」に応答してくれます。</p>



<h2 class="wp-block-heading"><span id="toc16">各モデルのまとめ</span></h2>



<p>最後に、本記事で紹介したモデルの特徴と推奨環境を表にまとめます。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>モデル名</th><th>特徴</th><th>メモリ要件</th><th>利用シーン</th></tr></thead><tbody><tr><td>TinyLlama</td><td>超軽量・動作確認用</td><td>4GB～</td><td>テスト・デモ</td></tr><tr><td>LLaMA 3 8B</td><td>性能と軽量性のバランス</td><td>8GB～16GB</td><td>汎用的な会話・文章生成</td></tr><tr><td>Mistral 7B</td><td>高精度・本格的利用</td><td>16GB～</td><td>長文生成・コード補助</td></tr></tbody></table></figure>



<h4 class="wp-block-heading"><span id="toc17">参考情報</span></h4>



<p>1GBメモリのサーバに8Gのスワップを設定しTinyLlamaのモデルを使用した動作確認を行った実行結果を以下に記載します。</p>



<pre class="wp-block-code"><code>&#91;XXXX@XXXX]$ ollama run tinyllama "こんにちは、自己紹介してください"
⠼ 大きなおじとうに行くかも。 今回も仕事を辿ればいいよね。 あっさり、あの日のことは急ぎ書きます。 いつも売
りだからご注文お願いして頂けるから、仕事の中で練うのがよかったと思います。 そこに考えるほどのやさしさを
見せたいです。 帰ってきている間は急ぎ書きます。 こんなに良い気持ちを持つように、あらゆることに向けるの
が最も重要な為と思います。

&#91;XXXX@XXXX]</code></pre>



<p>上記、結果の通り極端に低スペックな環境では正常動作は望めないばかりか、この結果が出力されるまで2時間程度の時間がかかりました。</p>



<h2 class="wp-block-heading"><span id="toc18">おわりに</span></h2>



<p>ここまでで、LinuxサーバにOllamaを導入し、PHPから挨拶を返すサンプルを動かす手順を紹介しました。</p>



<ul class="wp-block-list">
<li>サーバスペック不足時はスワップ設定で対応</li>



<li>モデルは用途に応じて軽量版から実用版まで選択可能</li>



<li>PHPからAPIを叩くことで簡単にWebアプリと連携可能</li>
</ul>



<p>「ローカル LLM」を導入することで、クラウドに依存しない新しいAI体験が可能になります。まずは軽量モデルで試し、用途に合わせて実用的なモデルへステップアップしてみてください</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box">
<h5 class="wp-block-heading"><span id="toc19">引用元</span></h5>



<ul class="wp-block-list">
<li><strong>Ollama 公式サイト</strong><br><a rel="noopener" href="https://ollama.com/" target="_blank">https://ollama.com/</a></li>



<li><strong>Ollama GitHubリポジトリ（インストール手順やAPI仕様）</strong><br><a rel="noopener" href="https://github.com/ollama/ollama" target="_blank">https://github.com/ollama/ollama</a></li>



<li><strong>Ollama ドキュメント（APIリファレンス）</strong><br><a rel="noopener" href="https://github.com/ollama/ollama/blob/main/docs/api.md" target="_blank">https://github.com/ollama/ollama/blob/main/docs/api.md</a></li>



<li><strong>Meta AI: LLaMA 3 発表記事</strong><br><a rel="noopener" href="https://ai.meta.com/llama/" target="_blank">https://ai.meta.com/llama/</a></li>



<li><strong>Mistral AI 公式サイト（Mistral 7B の概要）</strong><br><a rel="noopener" href="https://mistral.ai/" target="_blank">https://mistral.ai/</a></li>



<li><strong>Linux Swap 設定方法（Ubuntu公式）</strong><br><a rel="noopener" href="https://help.ubuntu.com/community/SwapFaq" target="_blank">https://help.ubuntu.com/community/SwapFaq</a></li>
</ul>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.takeho.com/getting-started-with-local-llm-on-linux-a-complete-guide-from-ollama-installation-to-php-sample-execution/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ウェブアプリケーションにおけるセキュリティの本質: 「完璧な防御」は存在するのか？</title>
		<link>https://blog.takeho.com/the-nature-of-security-in-web-applications-is-there-a-perfect-defense/</link>
					<comments>https://blog.takeho.com/the-nature-of-security-in-web-applications-is-there-a-perfect-defense/#respond</comments>
		
		<dc:creator><![CDATA[たけほ]]></dc:creator>
		<pubDate>Sun, 09 Mar 2025 09:21:24 +0000</pubDate>
				<category><![CDATA[コラム]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">https://blog.takeho.com/?p=829</guid>

					<description><![CDATA[はじめに インターネットの世界では、サイバー攻撃が年々巧妙化し、セキュリティ対策の重要性がますます高まっています。特に、PHPを利用したWebアプリケーションは、その手軽さゆえに多くの開発者に利用される一方で、適切な対策 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">はじめに</h2>



<p>インターネットの世界では、サイバー攻撃が年々巧妙化し、セキュリティ対策の重要性がますます高まっています。特に、PHPを利用したWebアプリケーションは、その手軽さゆえに多くの開発者に利用される一方で、適切な対策を施さなければ簡単に攻撃の標的となってしまいます。</p>



<p>「完璧な防御は存在するのか？」という問いに対する答えを求めつつ、本コラムではPHPアプリケーションのセキュリティの本質に迫り、システムを守るために何をすべきかを深掘りしていきます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">1. 「攻撃される」という前提で考えるべき理由</h2>



<p>多くの開発者は「攻撃されるのは大手企業だけ」と思いがちですが、実際には規模の大小を問わず、あらゆるWebアプリケーションが攻撃対象となっています。攻撃者は特定のターゲットを狙うだけでなく、自動化されたボットを使用して脆弱なサイトをスキャンし、弱点を見つけて攻撃します。</p>



<h3 class="wp-block-heading">1-1. ボットによるスキャン攻撃の実態</h3>



<p>攻撃者は、次のような手法でWebアプリケーションを自動的にスキャンし、脆弱性を探します。</p>



<ul class="wp-block-list">
<li><strong>SQLインジェクションスキャン</strong>: URLパラメータに <code>or 1=1</code> などを挿入して、不正なデータ取得が可能かテスト。</li>



<li><strong>ディレクトリトラバーサル</strong>: <code>../../etc/passwd</code> などを試し、システムの機密ファイルにアクセスできるか確認。</li>



<li><strong>公開されている管理画面の探索</strong>: <code>/admin</code>, <code>/wp-admin</code> などのURLにアクセスし、デフォルトのパスワードが設定された管理画面を見つけようとする。</li>
</ul>



<h3 class="wp-block-heading">1-2. 小規模サイトほど危険？</h3>



<p>大手企業はセキュリティ対策に予算をかけていますが、小規模なサイトは予算や知識の不足により脆弱なまま運用されていることが多いです。攻撃者はこのような「ソフトターゲット」を狙い、踏み台として利用したり、個人情報を盗んだりするケースが増えています。</p>



<p>「攻撃されないサイトはない」と考え、最初から防御を前提とした設計を行うことが重要です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2. 完璧な防御は存在しない？</h2>



<p>どれだけ強固なセキュリティ対策を施しても、「100%安全」と言い切ることはできません。なぜなら、セキュリティは攻撃者と防御者の「イタチごっこ」であり、新たな攻撃手法が次々と生み出されるからです。</p>



<h3 class="wp-block-heading">2-1. 「ゼロデイ攻撃」の恐怖</h3>



<p>ゼロデイ攻撃とは、開発者がまだ知らない脆弱性を突いて行われる攻撃のことを指します。たとえば、新たなPHPのバージョンで発見された未公開のセキュリティホールを利用して、システムに侵入される可能性があります。</p>



<p>これを防ぐためには、次のような対策が求められます。</p>



<ul class="wp-block-list">
<li><strong>常に最新のセキュリティパッチを適用する</strong></li>



<li><strong>WAF（Web Application Firewall）を導入し、未知の攻撃も検知・防御する</strong></li>



<li><strong>攻撃を受けた際のログを詳細に記録し、異常を即座に検知する</strong></li>
</ul>



<h3 class="wp-block-heading">2-2. 人的ミスが最大の脅威</h3>



<p>セキュリティ上の脆弱性は、技術的な要因だけではなく、人間のミスによって生まれることが非常に多いです。</p>



<h4 class="wp-block-heading">よくある人的ミスの例</h4>



<ol start="1" class="wp-block-list">
<li><strong>GitHubに機密情報を誤って公開</strong>
<ul class="wp-block-list">
<li><code>.env</code> ファイルをGitHubにプッシュし、データベースの認証情報が流出。</li>
</ul>
</li>



<li><strong>安易なパスワードの使用</strong>
<ul class="wp-block-list">
<li><code>password123</code>, <code>admin</code> などの単純なパスワードを使用。</li>
</ul>
</li>



<li><strong>不要なデバッグ機能を本番環境で有効にしたまま</strong>
<ul class="wp-block-list">
<li><code>display_errors=On</code> の設定により、攻撃者に内部情報を提供してしまう。</li>
</ul>
</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3. PHPアプリの具体的な防御策</h2>



<h3 class="wp-block-heading">3-1. 最小権限の原則を徹底する</h3>



<p>「必要な機能にのみアクセスを許可する」という考え方を徹底することで、攻撃の影響を最小限に抑えることができます。</p>



<h4 class="wp-block-heading">最小権限の具体例</h4>



<ul class="wp-block-list">
<li><strong>データベースユーザーに管理者権限を与えない</strong></li>



<li><strong>管理画面のURLをデフォルトから変更する（例: </strong><code><strong>/admin</strong></code><strong> → </strong><code><strong>/secure-dashboard</strong></code><strong>）</strong></li>



<li><strong>外部からアクセス可能なAPIエンドポイントを制限する</strong></li>
</ul>



<h3 class="wp-block-heading">3-2. 監視とログ管理の強化</h3>



<p>攻撃は「ある日突然やってくる」のではなく、事前にスキャンや不審なアクセスが増えることが多いです。そのため、異常なアクセスをリアルタイムで検知できる仕組みを導入しましょう。</p>



<h4 class="wp-block-heading">有効なログ管理手法</h4>



<ul class="wp-block-list">
<li><code><strong>fail2ban</strong></code>** を活用して異常なログイン試行をブロック**</li>



<li><strong>ELK（Elasticsearch + Logstash + Kibana）を導入し、異常なアクセスを可視化</strong></li>



<li><strong>不審なIPアドレスを自動でブロックするスクリプトを実装</strong></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">おわりに</h2>



<p>PHPアプリケーションのセキュリティは、「完璧な防御」が不可能であるからこそ、常に更新し続けることが求められます。</p>



<p><strong>大事なのは、「守りの文化」を組織全体で育てることです。</strong></p>



<ul class="wp-block-list">
<li><strong>開発者だけでなく、運用担当者やマネージャーもセキュリティの重要性を理解すること</strong></li>



<li><strong>定期的に脆弱性診断を行い、常に最新のセキュリティ対策を適用すること</strong></li>



<li><strong>「攻撃を受ける前提」で防御を考え、早期検知・早期対応ができる体制を構築すること</strong></li>
</ul>



<p>「攻撃されることは前提、その被害を最小限に抑えることが真のセキュリティ」——この意識を持って、強固なPHPアプリケーションを構築していきましょう。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.takeho.com/the-nature-of-security-in-web-applications-is-there-a-perfect-defense/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PHPアプリの性能最適化ガイド: 高速なWebサイト構築のポイント</title>
		<link>https://blog.takeho.com/performance-optimization-guide-for-php-apps-the-key-to-building-fast-websites/</link>
					<comments>https://blog.takeho.com/performance-optimization-guide-for-php-apps-the-key-to-building-fast-websites/#respond</comments>
		
		<dc:creator><![CDATA[たけほ]]></dc:creator>
		<pubDate>Sat, 08 Mar 2025 08:53:48 +0000</pubDate>
				<category><![CDATA[ウェブ・開発]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">https://blog.takeho.com/?p=822</guid>

					<description><![CDATA[はじめに PHPを使ったWebサイトを構築する際、性能問題は必ずといっていいほど議論されるテーマです。サイトのロード時間を短縮し、スケーラビリティを向上させることで、ユーザー体験を劇的に改善できます。 本記事では、PHP [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">はじめに</h2>



<p>PHPを使ったWebサイトを構築する際、性能問題は必ずといっていいほど議論されるテーマです。サイトのロード時間を短縮し、スケーラビリティを向上させることで、ユーザー体験を劇的に改善できます。</p>



<p>本記事では、PHPの性能最適化に関する実践的な手法を詳しく解説します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">1. コードレベルでできる性能向上の基礎</h2>



<h3 class="wp-block-heading">1-1. 型指定の活用</h3>



<p>PHP 7以降では型指定 (type hinting) を使用することで、インタプリタのオーバーヘッドを削減し、パフォーマンスを向上させることができます。</p>



<pre class="wp-block-code"><code>// 型指定なし
function add($a, $b) {
    return $a + $b;
}

// 型指定を追加
function add(int $a, int $b): int {
    return $a + $b;
}</code></pre>



<p>特に引数や戻り値の型指定を積極的に行うことで、エンジンの最適化が効きやすくなります。</p>



<h3 class="wp-block-heading">1-2. strict_types の利用</h3>



<p><code>declare(strict_types=1);</code> を利用すると、厳密な型チェックが行われ、予期しない型変換によるエラーを未然に防ぐことができます。</p>



<pre class="wp-block-code"><code>declare(strict_types=1);

function multiply(int $a, int $b): int {
    return $a * $b;
}</code></pre>



<p>これにより、意図しないデータ型の処理を防ぎ、処理の高速化が期待できます。</p>



<h3 class="wp-block-heading">1-3. ループの最適化</h3>



<p>PHPではループ処理がパフォーマンスに大きく影響します。ループ回数を減らし、計算を最小限に抑えることで、処理速度を向上させることができます。</p>



<pre class="wp-block-code"><code>// NG: ループのたびに関数を呼び出す
for ($i = 0; $i &lt; count($array); $i++) {
    echo $array&#91;$i];
}

// OK: count() を事前に変数に格納
$count = count($array);
for ($i = 0; $i &lt; $count; $i++) {
    echo $array&#91;$i];
}</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2. データベースクエリの最適化</h2>



<h3 class="wp-block-heading">2-1. インデックスの適切な利用</h3>



<p>MySQLなどのRDBMSを使用する場合、適切なインデックスを設定することでクエリの速度を大幅に向上させることができます。</p>



<pre class="wp-block-code"><code>CREATE INDEX idx_status ON users (status);</code></pre>



<p>インデックスを適用することで、特定のカラムの検索処理が最適化され、データ取得速度が向上します。</p>



<h3 class="wp-block-heading">2-2. プリペアドステートメントの活用</h3>



<p>SQLインジェクションの防止だけでなく、クエリのコンパイルコストを削減し、パフォーマンスを向上させることができます。</p>



<pre class="wp-block-code"><code>$stmt = $pdo-&gt;prepare("SELECT name, email FROM users WHERE status = :status");
$stmt-&gt;execute(&#91;'status' =&gt; 'active']);</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3. キャッシュを活用した最適化</h2>



<h3 class="wp-block-heading">3-1. OPcache の利用</h3>



<p>PHPのOPcacheを有効にすると、スクリプトのコンパイル結果をキャッシュし、実行速度を大幅に向上させることができます。</p>



<pre class="wp-block-code"><code>opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000</code></pre>



<h3 class="wp-block-heading">3-2. Redis を利用したデータキャッシュ</h3>



<p>Redisを利用してデータベースの負荷を軽減することができます。</p>



<pre class="wp-block-code"><code>$redis = new Redis();
$redis-&gt;connect('127.0.0.1', 6379);
$cacheKey = 'user_list';

if (!$redis-&gt;exists($cacheKey)) {
    $stmt = $pdo-&gt;query("SELECT * FROM users");
    $users = $stmt-&gt;fetchAll(PDO::FETCH_ASSOC);
    $redis-&gt;set($cacheKey, json_encode($users));
} else {
    $users = json_decode($redis-&gt;get($cacheKey), true);
}</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">4. フロントエンドとの連携による最適化</h2>



<h3 class="wp-block-heading">4-1. Gzip 圧縮の有効化</h3>



<p>サーバー側でGzip圧縮を有効にすると、転送量を削減し、ページの読み込み速度を向上させることができます。</p>



<pre class="wp-block-code"><code>output_buffering = On
zlib.output_compression = On</code></pre>



<h3 class="wp-block-heading">4-2. HTTP/2の導入</h3>



<p>HTTP/2を利用することで、並列リクエストを最適化し、リソースの取得を効率化できます。</p>



<pre class="wp-block-code"><code>server {
    listen 443 ssl http2;
    ssl_certificate /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.pem;
}</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">5. PHPフレームワークを活用した最適化</h2>



<h3 class="wp-block-heading">5-1. Laravel の Eager Loading</h3>



<p>ORM（Eloquent）を利用する際、N+1問題を避けるためにEager Loadingを活用すると、クエリ回数を大幅に削減できます。</p>



<pre class="wp-block-code"><code>// NG
$users = User::all();
foreach ($users as $user) {
    echo $user-&gt;posts-&gt;count();
}

// OK
$users = User::with('posts')-&gt;get();
foreach ($users as $user) {
    echo $user-&gt;posts-&gt;count();
}</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">おわりに</h2>



<p>本記事では、PHPのパフォーマンス最適化において重要なテクニックを幅広く解説しました。実際のプロジェクトに適用することで、Webサイトの高速化とスケーラビリティ向上を実現できます。</p>



<p>「細かい最適化を積み重ねること」が、高速なWebアプリを構築する鍵となります。</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.takeho.com/performance-optimization-guide-for-php-apps-the-key-to-building-fast-websites/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PHP5に慣れ親しんだエンジニアが掲示板をSymfony４で作成してみる</title>
		<link>https://blog.takeho.com/an-engineer-familiar-with-php5-creates-a-bulletin-board-using-symfony-4/</link>
					<comments>https://blog.takeho.com/an-engineer-familiar-with-php5-creates-a-bulletin-board-using-symfony-4/#respond</comments>
		
		<dc:creator><![CDATA[たけほ]]></dc:creator>
		<pubDate>Sun, 23 Feb 2025 01:05:00 +0000</pubDate>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Composer]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[掲示板]]></category>
		<guid isPermaLink="false">https://blog.takeho.com/?p=666</guid>

					<description><![CDATA[Symfony4はPHP5時代と比べるとモダンな機能やベストプラクティスが多数導入されています。ここでは、ユーザ認証（ログイン・登録）、管理者権限、アクセス制限、データベースの活用といった要素を取り入れた掲示板（BBS） [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Symfony4はPHP5時代と比べるとモダンな機能やベストプラクティスが多数導入されています。ここでは、ユーザ認証（ログイン・登録）、管理者権限、アクセス制限、データベースの活用といった要素を取り入れた掲示板（BBS）を段階的に実装してSymony4を習得していきます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6"><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">１．必要な環境の準備</a><ol><ol><ol><li><a href="#toc2" tabindex="0">Linuxサーバの前提</a></li><li><a href="#toc3" tabindex="0">ドメイン設定</a></li></ol></li></ol></li></ol></li><li><a href="#toc4" tabindex="0">２．Apacheによるドメイン設定</a></li><li><a href="#toc5" tabindex="0">３．Symfony4プロジェクトの作成と配置</a><ol><li><a href="#toc6" tabindex="0">１．プロジェクトディレクトリの作成</a></li><li><a href="#toc7" tabindex="0">２．Symfony4プロジェクトのインストール</a></li></ol></li><li><a href="#toc8" tabindex="0">４．データベース設定とエンティティ作成</a><ol><li><a href="#toc9" tabindex="0">4.1. データベース接続情報の設定</a></li><li><a href="#toc10" tabindex="0">4.2. ユーザエンティティの作成</a></li><li><a href="#toc11" tabindex="0">4.3. 掲示板投稿（Post）エンティティの作成</a></li><li><a href="#toc12" tabindex="0">4.4. マイグレーションの実行</a></li></ol></li><li><a href="#toc13" tabindex="0">５．ユーザ認証と管理者機能の実装</a><ol><li><a href="#toc14" tabindex="0">5.1. ログイン・登録フォームの作成</a></li><li><a href="#toc15" tabindex="0">5.2. security.yaml の設定</a></li><li><a href="#toc16" tabindex="0">5.3. 管理者権限の付与</a></li></ol></li><li><a href="#toc17" tabindex="0">６．掲示板機能（BBS）の実装</a><ol><li><a href="#toc18" tabindex="0">6.1. コントローラー作成</a></li><li><a href="#toc19" tabindex="0">6.2. Twigテンプレート作成</a></li></ol></li><li><a href="#toc20" tabindex="0">７．アクセス制限とセキュリティ対策</a><ol><ol><ol><li><a href="#toc21" tabindex="0">アクセス制限</a></li><li><a href="#toc22" tabindex="0">セキュリティ対策</a></li></ol></li></ol></li></ol></li><li><a href="#toc23" tabindex="0">８．パーミッション設定と本番環境向け最適化</a><ol><li><a href="#toc24" tabindex="0">8.1. ディレクトリのパーミッション設定</a><ol><li><a href="#toc25" tabindex="0">8.2. 本番環境向け設定の調整</a></li></ol></li></ol></li><li><a href="#toc26" tabindex="0">９．テストと動作確認</a><ol><li><a href="#toc27" tabindex="0">ローカルでの動作確認</a></li><li><a href="#toc28" tabindex="0">本番サーバでの確認</a></li><li><a href="#toc29" tabindex="0">トラブルシューティング</a></li></ol></li><li><a href="#toc30" tabindex="0">１０．まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">１．必要な環境の準備</span></h2>



<h5 class="wp-block-heading"><span id="toc2">Linuxサーバの前提</span></h5>



<ul class="wp-block-list">
<li><strong>OS</strong><br>Ubuntu、CentOS、Debianなど</li>



<li><strong>PHP</strong><br>Symfony4はPHP 7.1以上が必要です<br>※ <code>php -v</code> コマンドでバージョンを確認してください</li>



<li><strong>Composer</strong><br>PHPパッケージ管理ツール</li>



<li>Webサーバ<br>ApacheまたはNginx（ここではApacheの例を示します</li>



<li></li>
</ul>



<h5 class="wp-block-heading"><span id="toc3">ドメイン設定</span></h5>



<ul class="wp-block-list">
<li>DNSで「www.example.com」が対象サーバのIPを指していることを確認してください<br></li>
</ul>



<h2 class="wp-block-heading"><span id="toc4">２．Apacheによるドメイン設定</span></h2>



<p>ApacheでのVirtualHost設定例（/etc/apache2/sites-available/example.com.conf）</p>



<pre class="wp-block-code"><code>&lt;VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot /var/www/example.com/public

    &lt;Directory /var/www/example.com/public>
        AllowOverride All
        Require all granted
    &lt;/Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
&lt;/VirtualHost></code></pre>



<p>設定後、以下のコマンドで有効化と再起動を行います</p>



<pre class="wp-block-code"><code>sudo a2ensite example.com
sudo a2enmod rewrite
sudo systemctl reload apache2</code></pre>



<h2 class="wp-block-heading"><span id="toc5">３．Symfony4プロジェクトの作成と配置</span></h2>



<h3 class="wp-block-heading"><span id="toc6">１．プロジェクトディレクトリの作成</span></h3>



<p>Webサーバのドキュメントルート（例：<code>/var/www/example.com</code>）に移動し、ディレクトリを作成</p>



<pre class="wp-block-code"><code>sudo mkdir -p /var/www/example.com
cd /var/www/example.com
sudo chown $(whoami):$(whoami) .</code></pre>



<h3 class="wp-block-heading"><span id="toc7">２．Symfony4プロジェクトのインストール</span></h3>



<p>Composerを使ってSymfony4プロジェクトを作成します。今回はDoctrineやセキュリティ機能が含まれるスターターキットを利用</p>



<pre class="wp-block-code"><code>composer create-project symfony/website-skeleton board_project</code></pre>



<p>※ プロジェクトディレクトリ（例：<code>board_project</code>）内に<code>public</code>フォルダが作成されます。<br>※ ApacheのDocumentRootは、この<code>public</code>フォルダを指定してください（もしくはVirtualHost設定でパスを調整）。</p>



<h2 class="wp-block-heading"><span id="toc8">４．データベース設定とエンティティ作成</span></h2>



<p>掲示板の情報（ユーザ情報、投稿内容など）をデータベースに保存します。ここではMySQLを例にしています。</p>



<h3 class="wp-block-heading"><span id="toc9">4.1. データベース接続情報の設定</span></h3>



<p>プロジェクトルートの <code>.env</code> ファイルを編集し、<code>DATABASE_URL</code> を設定してください。</p>



<pre class="wp-block-code"><code>DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/db_name</code></pre>



<h3 class="wp-block-heading"><span id="toc10">4.2. ユーザエンティティの作成</span></h3>



<p>Symfony MakerBundleを利用してユーザエンティティを作成します。<br></p>



<pre class="wp-block-code"><code>php bin/console make:user</code></pre>



<p>プロンプトに従い、エンティティ名（例：<code>User</code>）や識別子（メールアドレスまたはユーザ名）、パスワードフィールド、既定のロール（通常ユーザには <code>ROLE_USER</code>、管理者には <code>ROLE_ADMIN</code>）を設定します。</p>



<h3 class="wp-block-heading"><span id="toc11">4.3. 掲示板投稿（Post）エンティティの作成</span></h3>



<p>投稿情報を保存するためのエンティティを作成します。</p>



<pre class="wp-block-code"><code>php bin/console make:entity Post</code></pre>



<p>以下のフィールドを追加すると良いでしょう：</p>



<ul class="wp-block-list">
<li><code>title</code> : string</li>



<li><code>content</code> : text</li>



<li><code>createdAt</code> : datetime</li>



<li><code>user</code> : ManyToOne（Userエンティティとの関連付け、投稿者情報）</li>
</ul>



<h3 class="wp-block-heading"><span id="toc12">4.4. マイグレーションの実行</span></h3>



<p>エンティティ作成後、マイグレーションを作成してデータベースに反映させます</p>



<pre class="wp-block-code"><code>php bin/console make:migration
php bin/console doctrine:migrations:migrate</code></pre>



<h2 class="wp-block-heading"><span id="toc13">５．ユーザ認証と管理者機能の実装</span></h2>



<p>Symfonyのセキュリティコンポーネントを利用して、ログイン・登録機能、アクセス制限を実装します。</p>



<h3 class="wp-block-heading"><span id="toc14">5.1. ログイン・登録フォームの作成</span></h3>



<p>Symfony MakerBundleを使用して、ログインフォーム認証を生成します</p>



<pre class="wp-block-code"><code>php bin/console make:auth</code></pre>



<p>また、ユーザ登録フォームも作成する場合は</p>



<pre class="wp-block-code"><code>php bin/console make:registration-form</code></pre>



<p>生成されたコントローラーやフォームクラスを適宜編集し、パスワードエンコーディングやCSRF保護の設定を確認してください。</p>



<h3 class="wp-block-heading"><span id="toc15">5.2. security.yaml の設定</span></h3>



<p>プロジェクトの <code>config/packages/security.yaml</code> を以下のように設定します。必要に応じてプロバイダやファイアウォールの設定を調整してください。</p>



<pre class="wp-block-code"><code>security:
    encoders:
        App\Entity\User:
            algorithm: bcrypt

    providers:
        app_user_provider:
            entity:
                class: App\Entity\User
                property: email

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            anonymous: true
            lazy: true
            provider: app_user_provider
            form_login:
                login_path: login
                check_path: login
                default_target_path: /
            logout:
                path: logout

    access_control:
        # 管理者エリアへのアクセスはROLE_ADMINに制限
        - { path: ^/admin, roles: ROLE_ADMIN }
        # 投稿作成・編集はログインユーザに制限
        - { path: ^/post/new, roles: ROLE_USER }
        - { path: ^/post/edit, roles: ROLE_USER }</code></pre>



<h3 class="wp-block-heading"><span id="toc16">5.3. 管理者権限の付与</span></h3>



<p>ユーザ登録時や管理画面で、管理者ユーザには <code>ROLE_ADMIN</code> を割り当てます。管理エリア用のコントローラー（例：<code>AdminDashboardController</code>）はルートを <code>/admin</code> で始め、上記の access_control により管理者以外はアクセスできないようにします。</p>



<h2 class="wp-block-heading"><span id="toc17">６．掲示板機能（BBS）の実装</span></h2>



<p>掲示板の基本機能として、投稿の一覧表示、投稿詳細、投稿作成、編集、削除などの機能を実装します。</p>



<h3 class="wp-block-heading"><span id="toc18">6.1. コントローラー作成</span></h3>



<p>例として、<code>BoardController</code> を作成し、以下のようなアクションを実装します。</p>



<pre class="wp-block-code"><code>&lt;?php
// src/Controller/BoardController.php
namespace App\Controller;

use App\Entity\Post;
use App\Repository\PostRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class BoardController extends AbstractController
{
    /**
     * @Route("/", name="board_index")
     */
    public function index(PostRepository $postRepository): Response
    {
        $posts = $postRepository->findBy(&#91;], &#91;'createdAt' => 'DESC']);
        return $this->render('board/index.html.twig', &#91;
            'posts' => $posts,
        ]);
    }

    /**
     * @Route("/post/{id}", name="board_view", requirements={"id"="\d+"})
     */
    public function view(Post $post): Response
    {
        return $this->render('board/view.html.twig', &#91;
            'post' => $post,
        ]);
    }

    /**
     * @Route("/post/new", name="board_new")
     */
    public function new(Request $request): Response
    {
        // ログインユーザのみ投稿可能
        $this->denyAccessUnlessGranted('ROLE_USER');

        $post = new Post();
        // フォーム作成、リクエストのハンドリング（例：Symfony Formコンポーネントを利用）
        // ※ ここでは簡易例として、フォーム処理の詳細は省略

        // 保存処理
        // $entityManager = $this->getDoctrine()->getManager();
        // $post->setCreatedAt(new \DateTime());
        // $post->setUser($this->getUser());
        // $entityManager->persist($post);
        // $entityManager->flush();

        return $this->render('board/new.html.twig', &#91;
            'post' => $post,
            // 'form' => $form->createView(),
        ]);
    }

    // 編集・削除アクションも必要に応じて実装
}</code></pre>



<h3 class="wp-block-heading"><span id="toc19">6.2. Twigテンプレート作成</span></h3>



<p><code>templates/board/</code> 配下に各ビュー用テンプレートを作成します。</p>



<p>例：<code>index.html.twig</code>（投稿一覧表示）</p>



<pre class="wp-block-code"><code>{% extends 'base.html.twig' %}

{% block title %}掲示板{% endblock %}

{% block body %}
    &lt;h1>掲示板投稿一覧&lt;/h1>
    {% for post in posts %}
        &lt;div class="post">
            &lt;h2>&lt;a href="{{ path('board_view', {id: post.id}) }}">{{ post.title }}&lt;/a>&lt;/h2>
            &lt;p>{{ post.content|raw }}&lt;/p>
            &lt;small>投稿者: {{ post.user.email }} ・ 投稿日: {{ post.createdAt|date('Y-m-d H:i') }}&lt;/small>
        &lt;/div>
        &lt;hr>
    {% else %}
        &lt;p>まだ投稿がありません。&lt;/p>
    {% endfor %}
    {% if is_granted('ROLE_USER') %}
        &lt;a href="{{ path('board_new') }}">新規投稿&lt;/a>
    {% else %}
        &lt;p>&lt;a href="{{ path('login') }}">ログイン&lt;/a>して投稿しましょう。&lt;/p>
    {% endif %}
{% endblock %}</code></pre>



<p>※ 各テンプレートは必要に応じてデザインやレイアウトを調整してください。</p>



<h2 class="wp-block-heading"><span id="toc20">７．アクセス制限とセキュリティ対策</span></h2>



<h5 class="wp-block-heading"><span id="toc21">アクセス制限</span></h5>



<ul class="wp-block-list">
<li><code>/admin</code> 以下のルートは <code>ROLE_ADMIN</code> のみアクセス可能とし、<code>security.yaml</code> の <code>access_control</code> で管理</li>



<li>投稿作成編集はログインユーザ（<code>ROLE_USER</code>）に限定するため、コントローラー内で <code>denyAccessUnlessGranted()</code> を利用</li>
</ul>



<h5 class="wp-block-heading"><span id="toc22">セキュリティ対策</span></h5>



<ul class="wp-block-list">
<li>フォームにCSRF保護を設定</li>



<li>ユーザ入力のバリデーションとサニタイズを実施</li>



<li>パスワードはエンコーダー（例：bcrypt）で暗号化</li>
</ul>



<h2 class="wp-block-heading"><span id="toc23">８．パーミッション設定と本番環境向け最適化</span></h2>



<h3 class="wp-block-heading"><span id="toc24">8.1. ディレクトリのパーミッション設定</span></h3>



<p>Symfonyはキャッシュやログを書き込むため、Apache（例：ユーザ www-data）が書き込めるようACLを設定します。</p>



<pre class="wp-block-code"><code>sudo setfacl -R -m u:www-data:rwX -m u:$(whoami):rwX var
sudo setfacl -dR -m u:www-data:rwX -m u:$(whoami):rwX var</code></pre>



<h4 class="wp-block-heading"><span id="toc25">8.2. 本番環境向け設定の調整</span></h4>



<p><code>.env</code> で環境変数を設定（例：<code>APP_ENV=prod</code>, <code>APP_DEBUG=0</code>）</p>



<p>キャッシュのウォームアップ</p>



<pre class="wp-block-code"><code>php bin/console cache:warmup --env=prod</code></pre>



<h2 class="wp-block-heading"><span id="toc26">９．テストと動作確認</span></h2>



<h3 class="wp-block-heading"><span id="toc27">ローカルでの動作確認</span></h3>



<p>ビルトインサーバを使ってローカルテスト</p>



<pre class="wp-block-code"><code>php bin/console server:run</code></pre>



<p>ブラウザで <code>http://127.0.0.1:8000</code> にアクセスし、投稿一覧やログイン・登録、投稿作成など各機能を確認してください。</p>



<h3 class="wp-block-heading"><span id="toc28">本番サーバでの確認</span></h3>



<p>DNS設定が完了していることを確認した上で、<code>http://www.example.com</code> へアクセスし、各機能が正しく動作するかテストします。</p>



<h3 class="wp-block-heading"><span id="toc29">トラブルシューティング</span></h3>



<p>エラーが発生した場合は、<code>var/log/</code> 内のログファイル（例：<code>prod.log</code> や <code>dev.log</code>）を確認し、エラーメッセージに基づいて対処してください。</p>



<h2 class="wp-block-heading"><span id="toc30">１０．まとめ</span></h2>



<p>今回のマニュアルでは、Symfony4を用いた掲示板アプリケーションの作成手順を、以下の要素を中心に解説しました</p>



<ul class="wp-block-list">
<li><strong>ユーザ認証・登録</strong><br>ログインフォームの生成とユーザエンティティ作成</li>



<li><strong>管理者権限</strong><br><code>ROLE_ADMIN</code> による管理エリアの制限</li>



<li><strong>アクセス制限</strong><br>各アクションへのアクセスをセキュリティコンポーネントで制御</li>



<li><strong>データベース連携</strong><br>Doctrineを利用したユーザ・投稿エンティティの管理</li>



<li><strong>掲示板機能</strong><br>投稿の一覧表示、詳細表示、投稿作成・編集機能の実装</li>
</ul>



<p>PHP5時代と比べ、Symfony4は構造化された設計や豊富なコンポーネントにより、拡張性・保守性に優れたアプリケーション開発が可能です。まずは本マニュアルの手順に沿って基本機能を実装し、そこからさらにカスタマイズや機能追加に挑戦してみてください。</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.takeho.com/an-engineer-familiar-with-php5-creates-a-bulletin-board-using-symfony-4/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PHPエンジニア必見！参考にすべき技術サイト10選</title>
		<link>https://blog.takeho.com/php-engineer-must-see-10-technical-sites-to-refer-to/</link>
					<comments>https://blog.takeho.com/php-engineer-must-see-10-technical-sites-to-refer-to/#respond</comments>
		
		<dc:creator><![CDATA[たけほ]]></dc:creator>
		<pubDate>Sat, 22 Feb 2025 05:30:58 +0000</pubDate>
				<category><![CDATA[ウェブ・開発]]></category>
		<category><![CDATA[Document]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">https://blog.takeho.com/?p=674</guid>

					<description><![CDATA[PHPを使った開発をしていると、最新の情報やベストプラクティス、問題解決のためのリソースが必要になります。公式ドキュメントからコミュニティ主導の情報サイト、最新ニュースを扱うサイトまで、PHPエンジニアならブックマークし [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>PHPを使った開発をしていると、最新の情報やベストプラクティス、問題解決のためのリソースが必要になります。公式ドキュメントからコミュニティ主導の情報サイト、最新ニュースを扱うサイトまで、PHPエンジニアならブックマークしておきたい技術サイトを10選ご紹介します。</p>



<h2 class="wp-block-heading"><strong>PHP: The Official Documentation</strong>（公式ドキュメント）</h2>



<p>PHPを扱うならまず最初にチェックしたいのが公式ドキュメント。関数やクラスの詳細な説明があり、ユーザー投稿による実践的な使用例も豊富。特に「User Contributed Notes」には実際の使用例が載っていることが多く、便利です。最新のPHPバージョンに対応した情報も随時更新されるので、まずはここを参照するのが基本です。</p>





<a rel="noopener" href="https://www.php.net/manual/ja" title="PHP: PHP &#12510;&#12491;&#12517;&#12450;&#12523; - Manual" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://www.php.net/images/meta-image.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">PHP: PHP &#12510;&#12491;&#12517;&#12450;&#12523; - Manual</div><div class="blogcard-snippet external-blogcard-snippet">PHP マニュアル</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.php.net/manual/ja" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.php.net</div></div></div></div></a>




<h2 class="wp-block-heading"><strong>PHP The Right Way</strong>（正しいPHPの書き方）</h2>



<p>PHPのベストプラクティスをまとめたサイト。初心者が間違いやすいポイントや、よりセキュアで効率的なコードを書くための指針が紹介されています。「初心者向けの入門書では物足りない」「モダンなPHP開発を学びたい」という方にぴったりです。</p>





<a rel="noopener" href="https://phptherightway.com" title="PHP: The Right Way" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://phptherightway.com/images/og-image.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">PHP: The Right Way</div><div class="blogcard-snippet external-blogcard-snippet">An easy-to-read, quick reference for PHP best practices, accepted coding standards, and links to authoritative PHP tutor...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://phptherightway.com/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">phptherightway.com</div></div></div></div></a>




<h2 class="wp-block-heading"><strong>Laravel News</strong>（Laravelに特化したニュースサイト）</h2>



<p>Laravelの最新情報やチュートリアル、コミュニティの動向を知ることができるサイト。Laravelを使っているなら、ここで新機能やベストプラクティスを学ぶのがおすすめ。実際のプロジェクトで使えるTipsも多く、開発効率を上げたい人には必須のサイトです。</p>





<a rel="noopener" href="https://laravel-news.com" title="Laravel News" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://picperf.io/https://laravel-news.com/images/laravelnews-og.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Laravel News</div><div class="blogcard-snippet external-blogcard-snippet">Laravel News is the official blog of Laravel. Every day bringing you the latest news, tutorials, and packages for the fr...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://laravel-news.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">laravel-news.com</div></div></div></div></a>




<h2 class="wp-block-heading"><strong>PHP.Watch</strong>（PHPの最新動向をキャッチアップ）</h2>



<p>PHPの最新リリース情報やセキュリティアップデート、パフォーマンス改善に関する情報を提供するサイト。新しいバージョンのリリースノートや変更点が詳しく解説されているので、常に最新のPHPをキャッチアップしたい人に最適です。</p>





<a rel="noopener" href="https://php.watch" title="PHP.Watch: PHP Articles, News, Upcoming Changes, RFCs, and more" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fphp.watch?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">PHP.Watch: PHP Articles, News, Upcoming Changes, RFCs, and more</div><div class="blogcard-snippet external-blogcard-snippet">PHP.Watch is a source for PHP News, upcoming changes to the language core and extensions, and articles.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://php.watch" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">php.watch</div></div></div></div></a>




<h2 class="wp-block-heading"><strong>SitePoint &#8211; PHP</strong>（幅広いPHP情報を提供）</h2>



<p>PHPに関する最新のチュートリアルやニュースを発信している技術ブログ。初心者向けの基礎知識から、フレームワークの活用方法、テスト駆動開発（TDD）など幅広いトピックを扱っています。英語サイトですが、実践的なコード例が多いので分かりやすいです。</p>





<a rel="noopener" href="https://www.sitepoint.com/php" title="SitePoint" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://uploads.sitepoint.com/wp-content/uploads/2021/07/1626450679sp-og.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">SitePoint</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.sitepoint.com/php" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.sitepoint.com</div></div></div></div></a>




<h2 class="wp-block-heading"><strong>Stack Overflow &#8211; PHP</strong>（Q&amp;Aサイトの定番）</h2>



<p>世界中のエンジニアがPHPに関する質問・回答を投稿しているQ&amp;Aサイト。「エラーの原因がわからない」「特定の関数の使い方を知りたい」といったときに検索すると、似たような問題とその解決策が見つかることが多いです。実際のプロジェクトで詰まったらまずはここをチェック！</p>





<a rel="noopener" href="https://stackoverflow.com/questions/tagged/php" title="Newest &#039;php&#039; Questions" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://stackoverflow.com/Content/Sites/stackoverflow/Img/apple-touch-icon.png?v=9168b8ec82a5" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Newest 'php' Questions</div><div class="blogcard-snippet external-blogcard-snippet">Stack Overflow | The World’s Largest Online Community for Developers</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://stackoverflow.com/questions/tagged/php?tab=Newest" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">stackoverflow.com</div></div></div></div></a>




<h2 class="wp-block-heading"><strong>PHP Roundtable</strong>（PHPのポッドキャスト＆ニュース）</h2>



<p>PHPの新機能や開発者インタビュー、業界の最新動向をポッドキャスト形式で紹介するサイト。英語ですが、深い技術的な議論が聞けるので、中級〜上級者向け。普段の開発で触れることのないトピックも学べるので、新しい視点を得るのにおすすめです。</p>





<a rel="noopener" href="https://www.phproundtable.com" title="PHPROUNDTABLE" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.phproundtable.com?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">PHPROUNDTABLE</div><div class="blogcard-snippet external-blogcard-snippet">The PHP podcast where everyone has a seat.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=http://phproundtable.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">phproundtable.com</div></div></div></div></a>




<h2 class="wp-block-heading"><strong>Packagist（Composerの公式リポジトリ）</strong></h2>



<p>PHPのパッケージ管理ツール「Composer」の公式リポジトリ。開発で便利なライブラリやフレームワークを探すのに最適です。「〇〇を実装したいけど、便利なライブラリがないかな？」と思ったら、まずはPackagistで検索してみましょう。</p>





<a rel="noopener" href="https://packagist.org" title="Packagist.org" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fpackagist.org?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Packagist.org</div><div class="blogcard-snippet external-blogcard-snippet">The PHP Package Repository</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://packagist.org" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">packagist.org</div></div></div></div></a>




<h2 class="wp-block-heading"><strong>PHP Weekly</strong>（PHP関連ニュースのメルマガ＆サイト）</h2>



<p>PHPの最新ニュース、チュートリアル、イベント情報などを毎週配信するニュースレター。PHP業界のトレンドをキャッチアップするのに最適で、新しい技術を学びたいエンジニア向け。無料で購読できるので、PHPエンジニアなら登録しておいて損はありません。</p>





<a rel="noopener" href="https://phpweekly.com" title="PHP Weekly. News, Articles and more all about PHP" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fphpweekly.com?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">PHP Weekly. News, Articles and more all about PHP</div><div class="blogcard-snippet external-blogcard-snippet">PHP Weekly is a free mailer sent out each week with PHP News, events, articles, links and more.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://phpweekly.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">phpweekly.com</div></div></div></div></a>




<h2 class="wp-block-heading"><strong>Reddit &#8211; r/PHP（海外のPHPコミュニティ）</strong></h2>



<p>PHPに関するニュースやディスカッションが活発なRedditのコミュニティ。新しいフレームワークの情報や、パフォーマンスチューニングに関する議論も多く、中級〜上級者向け。日本ではあまり知られていませんが、海外のPHP事情を知るのに役立ちます。</p>





<a rel="noopener" href="https://www.reddit.com/r/PHP" title="Reddit - The heart of the internet" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.reddit.com%2Fr%2FPHP?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Reddit - The heart of the internet</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.reddit.com/r/PHP" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.reddit.com</div></div></div></div></a>




<h2 class="wp-block-heading">まとめ</h2>



<p>PHPエンジニアとして成長するには、公式ドキュメントを活用しながら、最新の技術動向をキャッチアップし、実践的な知識を学ぶことが重要です。今回紹介したサイトをブックマークして、日々の開発に役立ててください！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.takeho.com/php-engineer-must-see-10-technical-sites-to-refer-to/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>HybridAuthを使ってソーシャルログインを実装する</title>
		<link>https://blog.takeho.com/egoeo74ndhzhus7kni2ovfehcu5socn9/</link>
					<comments>https://blog.takeho.com/egoeo74ndhzhus7kni2ovfehcu5socn9/#respond</comments>
		
		<dc:creator><![CDATA[たけほ]]></dc:creator>
		<pubDate>Sat, 26 Oct 2024 16:09:00 +0000</pubDate>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[プラグイン]]></category>
		<guid isPermaLink="false">https://blog.takeho.com/?p=499</guid>

					<description><![CDATA[「HybridIgniter」は、CodeIgniterにOAuth認証やソーシャルログイン機能を追加するためのライブラリです。特に、FacebookやGoogle、TwitterなどのSNSを使用してユーザー認証を行う [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>「HybridIgniter」は、CodeIgniterにOAuth認証やソーシャルログイン機能を追加するためのライブラリです。特に、FacebookやGoogle、TwitterなどのSNSを使用してユーザー認証を行う場合に便利です。以下は、HybridIgniterをCodeIgniterに組み込む手順と基本的な使い方です。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8"><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">インストールと設定</a><ol><li><a href="#toc2" tabindex="0">ダウンロードとインストール</a></li><li><a href="#toc3" tabindex="0">HybridAuthライブラリのダウンロード</a></li><li><a href="#toc4" tabindex="0">設定ファイルの作成</a></li><li><a href="#toc5" tabindex="0">コントローラーの作成</a></li><li><a href="#toc6" tabindex="0">ルーティングの設定</a></li></ol></li><li><a href="#toc7" tabindex="0">利用方法</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">インストールと設定</span></h2>



<h3 class="wp-block-heading"><span id="toc2">ダウンロードとインストール</span></h3>



<p>「HybridIgniter」ライブラリをダウンロードし、CodeIgniterの<code>application/libraries/</code>ディレクトリに配置します。</p>



<h3 class="wp-block-heading"><span id="toc3">HybridAuthライブラリのダウンロード</span></h3>



<p>HybridAuthの公式リポジトリから<a rel="noopener" href="https://github.com/hybridauth/hybridauth" target="_blank">HybridAuth</a>をダウンロードし、<code>application/third_party/HybridAuth/</code>に設置します。</p>



<h3 class="wp-block-heading"><span id="toc4">設定ファイルの作成</span></h3>



<p><code><strong>application/config/</strong></code>に<code><strong>hybridauthlib.php</strong></code>という設定ファイルを作成し、以下のように設定します。</p>



<pre class="wp-block-code"><code>$config&#91;'hybridauth'] = &#91;
    "base_url" => base_url("hauth/endpoint"),
    "providers" => &#91;
        "Google" => &#91;
            "enabled" => true,
            "keys" => &#91;"id" => "YOUR_GOOGLE_CLIENT_ID", "secret" => "YOUR_GOOGLE_CLIENT_SECRET"],
        ],
        "Facebook" => &#91;
            "enabled" => true,
            "keys" => &#91;"id" => "YOUR_FACEBOOK_APP_ID", "secret" => "YOUR_FACEBOOK_APP_SECRET"],
        ],
        "Twitter" => &#91;
            "enabled" => true,
            "keys" => &#91;"key" => "YOUR_TWITTER_CONSUMER_KEY", "secret" => "YOUR_TWITTER_CONSUMER_SECRET"],
        ],
    ],
];
</code></pre>



<p>各プロバイダー（Google、Facebook、Twitterなど）のクライアントIDやシークレットを入力します。</p>



<h3 class="wp-block-heading"><span id="toc5">コントローラーの作成</span></h3>



<p><code><strong>application/controllers/Hauth.php</strong></code>というコントローラーを作成し、以下のように認証の処理を実装します。</p>



<pre class="wp-block-code"><code>&lt;?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Hauth extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->library('hybridauthlib');
    }

    public function login($provider) {
        try {
            $service = $this->hybridauthlib->authenticate($provider);
            if ($service->isUserConnected()) {
                $userProfile = $service->getUserProfile();
                // ユーザーデータの取得と保存処理
                print_r($userProfile);
            }
        } catch(Exception $e) {
            show_error($e->getMessage());
        }
    }

    public function endpoint() {
        $this->hybridauthlib->process();
    }
}
</code></pre>



<p><code>login</code>メソッドで認証プロバイダ（Google、Facebookなど）を指定し、ユーザー認証を行います。</p>



<h3 class="wp-block-heading"><span id="toc6">ルーティングの設定</span></h3>



<p><code><strong>application/config/routes.php</strong></code>に、HybridAuthのエンドポイントとログインパスを追加します。</p>



<pre class="wp-block-code"><code>$route&#91;'hauth/(:any)'] = 'hauth/$1';</code></pre>



<h2 class="wp-block-heading"><span id="toc7">利用方法</span></h2>



<p>認証プロバイダーのURLにアクセスすることで、ユーザー認証を開始できます。</p>



<pre class="wp-block-code"><code>https:&#47;&#47;example.com/hauth/login/Google</code></pre>



<p>認証後、ユーザーのプロフィール情報が<code>$userProfile</code>に格納されます。これを使って、ユーザーのデータを取得したり、ユーザー情報をデータベースに保存することができます。</p>



<div class="wp-block-cocoon-blocks-label-box-1 label-box block-box not-nested-style cocoon-block-label-box"><div class="label-box-label block-box-label box-label"><span class="label-box-label-text block-box-label-text box-label-text">注意点</span></div><div class="label-box-content block-box-content box-content">
<p>各プロバイダーのAPI設定で、リダイレクトURIをCodeIgniterのエンドポイント（例：<code>https://example.com/hauth/endpoint</code>）に設定する必要があります。</p>
</div></div>





<a rel="noopener" href="https://github.com/hybridauth/hybridauth" title="GitHub - hybridauth/hybridauth: Open source social sign on PHP Library. HybridAuth goal is to act as an abstract api between your application and various social apis and identities providers such as Facebook, Twitter and Google." class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://opengraph.githubassets.com/b8254d163efdebf4cd80c9a922a38a6a0b7d345243a3db0a7d168706fa9bfaf7/hybridauth/hybridauth" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">GitHub - hybridauth/hybridauth: Open source social sign on PHP Library. HybridAuth goal is to act as an abstract api between your application and various social apis and identities providers such as Facebook, Twitter and Google.</div><div class="blogcard-snippet external-blogcard-snippet">Open source social sign on PHP Library. HybridAuth goal is to act as an abstract api between your application and variou...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/hybridauth/hybridauth" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>

]]></content:encoded>
					
					<wfw:commentRss>https://blog.takeho.com/egoeo74ndhzhus7kni2ovfehcu5socn9/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PHPにアップデート &#8211; 悪用済み脆弱性の修正をバイパスされる危険性</title>
		<link>https://blog.takeho.com/gzfs7wm8bf2sa4drqv5ilztv80nlm9xh/</link>
					<comments>https://blog.takeho.com/gzfs7wm8bf2sa4drqv5ilztv80nlm9xh/#respond</comments>
		
		<dc:creator><![CDATA[たけほ]]></dc:creator>
		<pubDate>Tue, 01 Oct 2024 09:47:07 +0000</pubDate>
				<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">https://blog.takeho.com/?p=435</guid>

					<description><![CDATA[2024年9月26日、PHPの重要なアップデートが発表されました。このアップデートには、セキュリティ上の重大な問題が修正されています。これについて詳しく説明します。 目次 PHPとは？修正されたセキュリティ問題リモートコ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>2024年9月26日、PHPの重要なアップデートが発表されました。このアップデートには、セキュリティ上の重大な問題が修正されています。これについて詳しく説明します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10"><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">PHPとは？</a></li><li><a href="#toc2" tabindex="0">修正されたセキュリティ問題</a><ol><li><a href="#toc3" tabindex="0">リモートコード実行（RCE）の脆弱性</a></li><li><a href="#toc4" tabindex="0">SQLインジェクションの脆弱性</a></li><li><a href="#toc5" tabindex="0">セキュリティ設定の不備</a></li></ol></li><li><a href="#toc6" tabindex="0">なぜこのアップデートが重要なのか？</a></li><li><a href="#toc7" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">PHPとは？</span></h2>



<p>PHPは、ウェブサイトやウェブアプリケーションを作るために広く使われているプログラミング言語です。例えば、あなたがよく利用するオンラインショッピングサイトやブログも、PHPで動いていることが多いのです。PHPのセキュリティが脆弱であると、悪意のある攻撃者にとって大きなチャンスを与えてしまうことになります。</p>



<h2 class="wp-block-heading"><span id="toc2">修正されたセキュリティ問題</span></h2>



<p>今回のアップデートでは、特に以下のような重要なセキュリティ問題が修正されました。</p>



<h3 class="wp-block-heading"><span id="toc3">リモートコード実行（RCE）の脆弱性</span></h3>



<p>の脆弱性は、攻撃者がサーバー上で任意のコードを実行できる可能性があるもので、特に危険です。例えば、攻撃者が悪意のあるコードを送信することで、サーバーの情報を盗み出したり、ウェブサイトの内容を改ざんしたりすることができました。</p>



<p>これは、家の中にある金庫の暗証番号が知られてしまい、誰でも金庫を開けられる状態に例えられます。金庫にはあなたの貴重品が入っているのに、簡単に開けられてしまう恐ろしい状態です。</p>



<h3 class="wp-block-heading"><span id="toc4">SQLインジェクションの脆弱性</span></h3>



<p>SQLインジェクションは、攻撃者がデータベースに対して不正なクエリを実行できる脆弱性です。この攻撃により、データベースからユーザーの情報を盗み出すことが可能になります。特に個人情報が保存されているサイトでは、非常に深刻な問題です。</p>



<p>これは、あなたの家の郵便受けに手紙を届けに来た郵便配達員が、実は悪い人で、あなたの個人情報を盗み出すために郵便受けをこじ開けてしまうようなものです。</p>



<h3 class="wp-block-heading"><span id="toc5">セキュリティ設定の不備</span></h3>



<p>一部のセキュリティ設定が不適切で、デフォルト設定のままだと攻撃を受けやすい状態でした。具体的には、エラーメッセージが攻撃者にシステムの情報を教えてしまうリスクがあります。</p>



<p>これは、あなたの家の窓が開いているのに気づかず、そのことを知らない悪い人が通りすがりに家の中を覗き見してしまうようなものです。開いている窓は、家の中がどんな状態かを簡単に教えてしまいます。</p>



<h2 class="wp-block-heading"><span id="toc6">なぜこのアップデートが重要なのか？</span></h2>



<p>PHPの脆弱性を放置すると、悪意のある攻撃者が容易にウェブサイトに侵入し、個人情報を盗んだり、ウェブサイトの機能を壊したりする危険があります。たとえば、あなたのクレジットカード情報や住所が流出することで、最悪の場合、経済的な損失や個人の安全にも影響を及ぼすことがあります。</p>



<h2 class="wp-block-heading"><span id="toc7">まとめ</span></h2>



<p>今回のPHPアップデートは、ウェブサイトやアプリケーションの安全性を確保するために非常に重要です。これにより、リモートコード実行やSQLインジェクションのリスクが大幅に軽減され、ウェブサイトを訪れるユーザーの情報が守られます。</p>



<p>セキュリティは、一度設定したら終わりではなく、定期的なアップデートや見直しが必要です。自分のウェブサイトを守るために、今回のアップデートをしっかり行い、安心してインターネットを楽しんでください！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.takeho.com/gzfs7wm8bf2sa4drqv5ilztv80nlm9xh/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>手軽にPHPでキャッシュを使う方法</title>
		<link>https://blog.takeho.com/shssakn6svjq5ve7ks3on23kthc8s5of/</link>
					<comments>https://blog.takeho.com/shssakn6svjq5ve7ks3on23kthc8s5of/#respond</comments>
		
		<dc:creator><![CDATA[たけほ]]></dc:creator>
		<pubDate>Fri, 26 Jul 2024 06:54:02 +0000</pubDate>
				<category><![CDATA[ウェブ・開発]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">https://blog.takeho.com/?p=90</guid>

					<description><![CDATA[PHPはPEARのキャッシュライブラリを使用して簡単にキャッシュ機能を利用する事ができます。 この記載ではPEARのキャッシュライブラリ（Cache_Lite）をのインストールと使用方法について説明します。 目次 インス [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>PHPはPEARのキャッシュライブラリを使用して簡単にキャッシュ機能を利用する事ができます。</p>



<p>この記載ではPEARのキャッシュライブラリ（Cache_Lite）をのインストールと使用方法について説明します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12"><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">インストール方法</a></li><li><a href="#toc2" tabindex="0">使用方法</a><ol><li><a href="#toc3" tabindex="0">データの保存</a></li><li><a href="#toc4" tabindex="0">データの取得</a></li><li><a href="#toc5" tabindex="0">キャッシュの強制削除</a></li></ol></li><li><a href="#toc6" tabindex="0">使用例</a><ol><li><a href="#toc7" tabindex="0">変数での使用例</a></li><li><a href="#toc8" tabindex="0">HTMLでの使用例</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">インストール方法</span></h2>



<p>次のコマンド一行の実行で Cache_Lite をインストールする事ができます。</p>



<pre class="wp-block-code"><code># pear install Cache_Lite</code></pre>



<p>composerコマンドでインストールする場合は次のコマンドを実行してインストールします。</p>



<pre class="wp-block-code"><code># composer require pear/cache_lite </code></pre>



<h2 class="wp-block-heading"><span id="toc2">使用方法</span></h2>



<p>キャッシュライブラリを読み込みインスタンスを作成します。</p>



<p>インスタンス生成の際にキャッシュの設定を行います。</p>



<pre class="wp-block-code"><code>&lt;?php
require_once 'Cache/Lite.php';

$Cache_Lite = new Cache_Lite(&#91;
  'cacheDir' => '/tmp/', // キャッシュファイルの保存ディレクトリ
  'lifeTime' => 1800, // キャッシュ有効時間（60*30=30分）
]);</code></pre>



<h3 class="wp-block-heading"><span id="toc3">データの保存</span></h3>



<p>データは次のようにキー名（例：key_name）を指定してキャッシュに保存する事ができます。</p>



<pre class="wp-block-code"><code>$data = &#91;'a' => 123, 'b' => 456];
$Cache_Lite->save($data, 'key_name');</code></pre>



<h3 class="wp-block-heading"><span id="toc4">データの取得</span></h3>



<p>キャッシュに保存したデータは次のように取得する事ができます。</p>



<pre class="wp-block-code"><code>$data = $Cache_Lite->get('key_name');</code></pre>



<h3 class="wp-block-heading"><span id="toc5">キャッシュの強制削除</span></h3>



<p>キャッシュに保存されたデータを強制削除する場合は次の通りになります。</p>



<pre class="wp-block-code"><code>$Cache_Lite->remove('key_name');</code></pre>



<h2 class="wp-block-heading"><span id="toc6">使用例</span></h2>



<p>実際にキャッシュの機能を使用する例として変数での使用例とHTMLソースコードでの使用例を記載します。</p>



<h3 class="wp-block-heading"><span id="toc7">変数での使用例</span></h3>



<pre class="wp-block-code"><code>&lt;?php
require_once 'Cache/Lite.php';

$Cache_Lite = new Cache_Lite(&#91;
  'cacheDir' => '/tmp/', // キャッシュファイルの保存ディレクトリ
  'lifeTime' => 1800, // キャッシュ有効時間（60*30=30分）
]);

if ($data = $Cache_Lite->get('key_name')) {　// キャッシュデータが存在する場合
  $data&#91;'status'] = 'Is cached data.';

} else {　// キャッシュデータが存在しない場合
  $data = &#91;'text' => 'Hello World'];
  $Cache_Lite->save($data, 'key_name');
  $data&#91;'status'] = 'Not cached data.';
}

var_dump($data);</code></pre>



<h3 class="wp-block-heading"><span id="toc8">HTMLでの使用例</span></h3>



<pre class="wp-block-code"><code>&lt;!DOCTYPE html>
&lt;html>
&lt;head>
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
&lt;title>キャッシュテスト&lt;/title>
&lt;/head>
&lt;body>
&lt;h3>キャッシュテスト&lt;/h3>
&lt;?php
require_once 'Cache/Lite.php';

$Cache_Lite = new Cache_Lite(&#91;
  'cacheDir' => '/tmp/', // キャッシュファイルの保存ディレクトリ
  'lifeTime' => 1800, // キャッシュ有効時間（60*30=30分）
]);

if ($data = $Cache_Lite->get('key_name')) {　// キャッシュデータが存在する場合
  echo $data;

} else {　// キャッシュデータが存在しない場合
  ob_start();

?>
&lt;p>これは、&lt;?php echo date('Y年m月d日H時i分s秒') ?>にキャッシュされたテキストです。&lt;/p>
&lt;?php

  $data = ob_get_contents();
  ob_end_clean();
  $Cache_Lite->save($data, 'key_name');
  echo $data;
}
?>
&lt;/body>
&lt;/html></code></pre>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.takeho.com/shssakn6svjq5ve7ks3on23kthc8s5of/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
