﻿<?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  |  Web Creators Hub</title>
	<atom:link href="https://web-creators-hub.com/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>https://web-creators-hub.com</link>
	<description>WEB技術などの情報をわかりやすく配信するメディア</description>
	<lastBuildDate>Wed, 08 Feb 2023 01:56:31 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.8.2</generator>
	<item>
		<title>Laravel7から8 Target class [bindings] does not exist.</title>
		<link>https://web-creators-hub.com/php/laravel8-error-bindings/</link>
		<pubDate>Wed, 28 Dec 2022 06:24:06 +0000</pubDate>
		<dc:creator><![CDATA[taizo]]></dc:creator>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">https://web-creators-hub.com/?p=749</guid>
		<description><![CDATA[kernel.phpをLaravel7のソース8にコピペしたときに出たエラー。 エラーの原因 kernel.php Laravel7の場合 ...]]></description>
				<content:encoded><![CDATA[<p>kernel.phpをLaravel7のソース8にコピペしたときに出たエラー。</p>
<h2>エラーの原因</h2>
<p>kernel.php</p>
<p>Laravel7の場合</p>
<pre class="brush: bash; title: ; notranslate">
        'stateful_api' =&gt; [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            'throttle:60,1',
            'bindings',
        ],
</pre>
<p>Laravel8の場合<br />
bindingsクラスをフルパスで記入する必要がある。<br />
bindings →  \Illuminate\Routing\Middleware\SubstituteBindings::class</p>
<pre class="brush: bash; title: ; notranslate">
        'stateful_api' =&gt; [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            'throttle:60,1',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
</pre>
]]></content:encoded>
			</item>
		<item>
		<title>PHPパッケージ管理ツール「Composer」をWindows10にインストール</title>
		<link>https://web-creators-hub.com/php/composer/</link>
		<pubDate>Thu, 20 Feb 2020 15:15:27 +0000</pubDate>
		<dc:creator><![CDATA[taizo]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">https://web-creators-hub.com/?p=674</guid>
		<description><![CDATA[PHPのパッケージ管理ツール「Composer」をWindows10にインストールします。PHPを使用するためXAMPPなどインストールされ...]]></description>
				<content:encoded><![CDATA[<p>PHPのパッケージ管理ツール「Composer」をWindows10にインストールします。PHPを使用するためXAMPPなどインストールされている必要があります。<br />
Composerは、Lalavelのインストールなどに使います。</p>
<h2>Composerインストーラーをダウンロード</h2>
<p>以下のURLからComposer-Setup.exeをダウンロードします。<br />
<a href="https://getcomposer.org/doc/00-intro.md#installation-windows">https://getcomposer.org/doc/00-intro.md#installation-windows</a></p>
<h2>Composerのインストール</h2>
<p>ダウンロードしたインストーラをダブルクリックで実行します。画面がでてきたら「Next」を押します。<br />
<a href="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer1.png"><img src="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer1.png" alt="" width="640" height="475" class="alignnone size-full wp-image-675" srcset="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer1.png 640w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer1-300x223.png 300w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer1-320x238.png 320w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<p>XAMPPがインストールされている場合は、自動的にPHPの実行ファイルを認識してくれます。認識してくれない場合は、任意で設定する必要があります。<br />
設定が終わったら「Next」を押します。<br />
<a href="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer2.png"><img src="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer2.png" alt="" width="640" height="475" class="alignnone size-full wp-image-676" srcset="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer2.png 640w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer2-300x223.png 300w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer2-320x238.png 320w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<p>プロキシの設定画面が表示されます。必要がある場合は設定して「Next」を押します。<br />
<a href="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer3.png"><img src="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer3.png" alt="" width="640" height="475" class="alignnone size-full wp-image-677" srcset="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer3.png 640w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer3-300x223.png 300w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer3-320x238.png 320w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<p>確認画面が出るので問題がなければ「Install」を押します。<br />
<a href="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer4.png"><img src="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer4.png" alt="" width="640" height="475" class="alignnone size-full wp-image-678" srcset="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer4.png 640w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer4-300x223.png 300w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer4-320x238.png 320w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<p>インストール完了後注意書きを読み問題なければ「Next」を押します。<br />
<a href="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer5.png"><img src="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer5.png" alt="" width="640" height="475" class="alignnone size-full wp-image-679" srcset="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer5.png 640w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer5-300x223.png 300w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer5-320x238.png 320w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<p>インストール終了です。<br />
<a href="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer6.png"><img src="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer6.png" alt="" width="640" height="475" class="alignnone size-full wp-image-680" srcset="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer6.png 640w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer6-300x223.png 300w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer6-320x238.png 320w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<h2>動作を確認する</h2>
<p>コマンドプロンプトを起動しと入力しエラーがでなければ動作完了です。</p>
<pre class="brush: bash; title: ; notranslate">
composer -V
</pre>
<p><a href="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer7.png"><img src="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer7.png" alt="" width="600" height="314" class="alignnone size-full wp-image-681" srcset="https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer7.png 600w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer7-300x157.png 300w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2020/02/composer7-320x167.png 320w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
]]></content:encoded>
			</item>
		<item>
		<title>【最短マッチ】正規表現で手前の文字列のみ取得したい場合は特性変更できる「？」を使う</title>
		<link>https://web-creators-hub.com/php/pattern/</link>
		<pubDate>Tue, 07 May 2019 14:40:45 +0000</pubDate>
		<dc:creator><![CDATA[taizo]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[正規表現]]></category>

		<guid isPermaLink="false">https://web-creators-hub.com/?p=286</guid>
		<description><![CDATA[正規表現最短マッチ 正規表現を覚えたてのときぶち当たる壁があります。取得したい場所を指定してしているのに要らないところまで取得してしまう。例...]]></description>
				<content:encoded><![CDATA[<p><img src="https://web-creators-hub.com/__wordpress/wp-content/uploads/2019/05/pattern_main.png" alt="" width="700" height="350" class="alignnone size-full wp-image-297" srcset="https://web-creators-hub.com/__wordpress/wp-content/uploads/2019/05/pattern_main.png 700w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2019/05/pattern_main-300x150.png 300w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2019/05/pattern_main-320x160.png 320w" sizes="(max-width: 700px) 100vw, 700px" /></p>
<h2>正規表現最短マッチ</h2>
<p>正規表現を覚えたてのときぶち当たる壁があります。取得したい場所を指定してしているのに要らないところまで取得してしまう。例ではhtmlのclass名のみ取得したいときぶち当たります。</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;test&quot;&gt;&lt;div class=&quot;test__in&quot;&gt;test&lt;/div&gt;&lt;/div&gt;
</pre>
<p>class「test」のみ取得したいとき</p>
<pre class="brush: php; title: ; notranslate">
/class=\&quot;(.*)\&quot;/
</pre>
<p>PHPでは</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
 $source = '&lt;div class=&quot;test&quot;&gt;&lt;div class=&quot;test__in&quot;&gt;test&lt;/div&gt;&lt;/div&gt;';
 $pattern = '/class=\&quot;(.*)\&quot;/';
 
 preg_match($pattern,$source, $m);

?&gt;
</pre>
<p>こんな感じで書いたとします。しかし結果は</p>
<p><img class="alignnone size-full wp-image-287" src="https://web-creators-hub.com/__wordpress/wp-content/uploads/2019/05/pattern.jpg" alt="" width="501" height="146" srcset="https://web-creators-hub.com/__wordpress/wp-content/uploads/2019/05/pattern.jpg 501w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2019/05/pattern-300x87.jpg 300w, https://web-creators-hub.com/__wordpress/wp-content/uploads/2019/05/pattern-320x93.jpg 320w" sizes="(max-width: 501px) 100vw, 501px" /></p>
<p>になってしまいます。よく考えると確かにそうなります。<br />
しかし解決方法がなかなか見当たらないのです。ググりたいけどどういう状況かを説明できないので、はじめの場合は苦戦します。実はこの状況「最短マッチ」といいます。私は「正規表現　手前のみ取得」でたどり着きました。</p>
<h2>.*?</h2>
<p>「最短マッチ」させるためには一般的には以下のように書きます。</p>
<pre class="brush: php; title: ; notranslate">
/class=\&quot;(.*?)\&quot;/
</pre>
<p>PHPでは</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
 $source = '&lt;div class=&quot;test&quot;&gt;&lt;div class=&quot;test__in&quot;&gt;test&lt;/div&gt;&lt;/div&gt;';
 $pattern = '/class=\&quot;(.*?)\&quot;/';
 
 preg_match($pattern,$source, $m);

?&gt;
</pre>
<p>？(はてな)を加えるだけでなぜか取得できます。</p>
<h2>なぜ.*?で取得できるのか</h2>
<p>*(アスタリスク)や？(はてな)は量指定子文字といい、前の文字を何回でてくるか指定することができる文字です。</p>
<table>
<thead>
<tr>
<th style="text-align: center;">量指定子</th>
<th style="text-align: center;">説明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">*</td>
<td style="text-align: center;">0回以上の繰り返しにマッチ</td>
</tr>
<tr>
<td style="text-align: center;">?</td>
<td style="text-align: center;">0回または1回の出現にマッチする表現</td>
</tr>
<tr>
<td style="text-align: center;">+</td>
<td style="text-align: center;">1回以上の繰り返しにマッチ</td>
</tr>
<tr>
<td style="text-align: center;">{n}</td>
<td style="text-align: center;">n回の繰り返しにマッチする表現</td>
</tr>
<tr>
<td style="text-align: center;">{n,}</td>
<td style="text-align: center;">n回以上の繰り返しにマッチする表現</td>
</tr>
<tr>
<td style="text-align: center;">{n,m}</td>
<td style="text-align: center;">n回以上m回以下の繰り返しにマッチする表現</td>
</tr>
</tbody>
</table>
<p>量指定子はデフォルトで「できるだけ長い文字列にマッチさせる特性(最長一致)」をもっています。そのため「*(アスタリスク)」はできる長く取得するため初めに書いたように予定していないところまで取得したのです。この特性を変更させるのが「？(はてな)」です。量指定子の後ろに「？」をつけると特性が「できるだけ短い文字列にマッチする特性（最短一致）」に変わります。上記の量指定子だけ覚えていると意味がわかりませんが、「？」には特性を変更できる特殊な能力があると覚えておくと便利に利用できます。</p>
<div class="alert">特性変更<br />
.* 最長一致<br />
↓<br />
.*? 最短一致</div>
<h2>連続して取得したいとき</h2>
<p>以下のソースのクラスを全て取得したいときはどのようにすればいいでしょうか。</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;test&quot;&gt;&lt;div class=&quot;test__in&quot;&gt;test&lt;/div&gt;&lt;/div&gt;
</pre>
<p>「test」「test__in」も取得したい。</p>
<p>PHPの場合では連続マッチできる関数があります。<br />
preg_match　単一<br />
↓<br />
preg_match_all　連続</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
 $source = '&lt;div class=&quot;test&quot;&gt;&lt;div class=&quot;test__in&quot;&gt;test&lt;/div&gt;&lt;/div&gt;';
 $pattern = '/class=\&quot;(.*?)\&quot;/';
 
 preg_match_all($pattern,$source, $matches, PREG_OFFSET_CAPTURE);

 foreach($matches[1] as $result){
     echo str_replace(&quot; &quot;,&quot;&lt;br&gt;&quot;,$result[0]) . &quot;&lt;br&gt;&quot;;
 }
 
?&gt;
</pre>
]]></content:encoded>
			</item>
	</channel>
</rss>
