<?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エラーの原因と対策 &#8211; PHPプログラミングの教科書 [php1st.com]</title>
	<atom:link href="https://php1st.com/trouble/feed" rel="self" type="application/rss+xml" />
	<link>https://php1st.com</link>
	<description>気軽に読めるPHP入門書・PHPスクリプトが動かないときの原因と対策などを紹介します。</description>
	<lastBuildDate>Thu, 12 Sep 2019 14:59:03 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>
	<item>
		<title>PHPの関数や変数の前にあるアットマークの意味は？</title>
		<link>https://php1st.com/2665</link>
		
		<dc:creator><![CDATA[西沢直木]]></dc:creator>
		<pubDate>Thu, 12 Sep 2019 14:59:03 +0000</pubDate>
				<category><![CDATA[PHP全般]]></category>
		<guid isPermaLink="false">https://php1st.com/?p=2665</guid>

					<description><![CDATA[PHPスクリプトを見ていると関数の前に「@」（アットマーク）が付いているのをみたことがありませんか？ この「@」の用途はエラーを非表示にすることです。「エラー制御演算子」とよばれます。 【参考】PHP: エラー制御演算子 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>PHPスクリプトを見ていると関数の前に「@」（アットマーク）が付いているのをみたことがありませんか？</p>
<pre class="brush: php; gutter: false; title: 関数の前にアットマーク; notranslate">
&lt;?php
@file_get_contents(&quot;input.txt&quot;);
</pre>
<p>この「@」の用途はエラーを非表示にすることです。「エラー制御演算子」とよばれます。</p>
<p>【参考】<a target="_blank" href="https://www.php.net/manual/ja/language.operators.errorcontrol.php" rel="noopener noreferrer">PHP: エラー制御演算子</a></p>
<p>ピンと来ない場合は@を取り除いて実行してみましょう。</p>
<pre class="brush: php; gutter: false; title: アットマークを削除して実行; notranslate">
&lt;?php
file_get_contents(&quot;input.txt&quot;);
</pre>
<p>「input.txt」が存在しない場合、次のようなエラーメッセージ（Warning）が表示されます。ファイルが存在しないので開けない、という警告です。</p>
<div class="list-title">実行結果</div>
<div class="res">
PHP Warning:  file_get_contents(input.txt): failed to open stream: No such file or directory in …略….php on line 2</p>
<p>Warning: file_get_contents(input.txt): failed to open stream: No such file or directory in …略….php on line 2
</p></div>
<p>もう一度@を付けて実行してみましょう。</p>
<pre class="brush: php; gutter: false; title: アットマークを付けて実行; notranslate">
&lt;?php
@file_get_contents(&quot;input.txt&quot;);
</pre>
<p>今度は「input.txt」が存在しなくてもエラーメッセージが表示されないはずです。これはエラーがなくなったのではなく、非表示にしただけです。その点、注意してください。</p>
<p>変数の前にある@も同じです。次のコードを実行すると、$aが存在しない場合はエラーメッセージが表示されます。</p>
<pre class="brush: php; gutter: false; title: 変数が存在しない場合はエラーになる; notranslate">
echo $a;
</pre>
<div class="list-title">実行結果</div>
<div class="res">
PHP Notice:  Undefined variable: …略….php on line 3<br />
Notice: Undefined variable: …略….php on line 3
</div>
<p>変数の前にアットマークを付けると上記のNoticeは表示されません。</p>
<pre class="brush: php; gutter: false; title: 変数の前にアットマークを付ける; notranslate">
echo @$a;
</pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>「http:// wrapper is disabled in the server configuration by allow_url_include=0」と表示されるとき</title>
		<link>https://php1st.com/2571</link>
		
		<dc:creator><![CDATA[西沢直木]]></dc:creator>
		<pubDate>Sat, 10 Nov 2018 02:25:00 +0000</pubDate>
				<category><![CDATA[エラーメッセージ]]></category>
		<guid isPermaLink="false">https://php1st.com/?p=2571</guid>

					<description><![CDATA[PHPのWarning「http:// wrapper is disabled in the server configuration by allow_url_include=0」はファイルをインクルードできないときな [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>PHPのWarning「http:// wrapper is disabled in the server configuration by allow_url_include=0」はファイルをインクルードできないときなどに表示されます。</p>
<p>特に、URLを指定したファイルインクルードが許可されていないレンタルサーバーなどで表示されます。</p>
<p>たとえば、次のようなコードです。</p>
<pre class="brush: php; gutter: false; title: Warningが表示されるかも; notranslate">
$template = get_template_directory_uri() . '/template.php';
</pre>
<p>get_template_directory_uri関数によって「http://…template.php」のようなURLが返されますが、URLベースのファイルインクルードが許可されていないとエラーになります。</p>
<p>その場合、get_template_directory_uri関数の代わりにget_template_directory関数を使って物理パスを取得することでWarningは解消されます。</p>
<p>php.iniでallow_url_includeの設定を変更した方が簡単そうですが、これが許可されているかどうかはレンタルサーバーによって異なります。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>php.iniの場所</title>
		<link>https://php1st.com/2468</link>
		
		<dc:creator><![CDATA[西沢直木]]></dc:creator>
		<pubDate>Wed, 04 Jul 2018 13:03:13 +0000</pubDate>
				<category><![CDATA[PHP全般]]></category>
		<guid isPermaLink="false">https://php1st.com/?p=2468</guid>

					<description><![CDATA[PHPの設定を変更したくなることもありますが問題はphp.iniの場所です。場所の調べ方を紹介します。また、レンタルサーバーによってはメニューで変更できるようになっているので、簡単にまとめておきます。 php.iniの場 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>PHPの設定を変更したくなることもありますが問題はphp.iniの場所です。場所の調べ方を紹介します。また、レンタルサーバーによってはメニューで変更できるようになっているので、簡単にまとめておきます。</p>
<h2>php.iniの場所を調べる方法</h2>
<p>php.iniの場所はphpinfo関数で調べることができます。次の1行だけを入力したファイル（例：info.php）を作成します。</p>
<pre class="brush: php; gutter: false; title: ; notranslate">
&lt;?php phpinfo(); ?&gt;
</pre>
<p>このファイルをサーバーにアップロードして実行すると、「Loaded Configuration File 」にphp.iniの場所が表示されます。</p>
<div id="attachment_2520" style="width: 541px" class="wp-caption alignnone"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-2520" src="https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-53-28.jpg" alt="php.iniの場所" width="531" height="159" class="size-full wp-image-2520" srcset="https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-53-28.jpg 531w, https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-53-28-300x90.jpg 300w, https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-53-28-320x96.jpg 320w" sizes="(max-width: 531px) 100vw, 531px" /><p id="caption-attachment-2520" class="wp-caption-text">php.iniの場所</p></div>
<h2>レンタルサーバーのメニューでphp.iniを編集する場合</h2>
<p>レンタルサーバーによってはphp.iniを簡単に編集できるメニューがあるので、上記のように場所を確認する必要もないかもしれません。</p>
<p>レンタルサーバーごとのphp.ini編集メニューをまとめておきます。</p>
<h3>エックスサーバーの場合</h3>
<p>エックスサーバーではサーバーパネルの「PHP」‐「php.ini設定」メニューで、状態をONにした後に「php.ini設定変更」または「php.ini直接編集」から設定を変更できます。</p>
<div id="attachment_2516" style="width: 555px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-2516" src="https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-14-25.jpg" alt="php.iniの編集（エックスサーバー）" width="545" height="242" class="size-full wp-image-2516" srcset="https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-14-25.jpg 545w, https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-14-25-300x133.jpg 300w, https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-14-25-320x142.jpg 320w" sizes="(max-width: 545px) 100vw, 545px" /><p id="caption-attachment-2516" class="wp-caption-text">php.iniの編集（エックスサーバー）</p></div>
<p>ドメインごとに異なる設定が可能です。</p>
<p>直接ファイルを編集する場合はドメインのxserver_phpフォルダにあります。</p>
<p>設定を間違えた場合は「php.ini設定初期化」からリセットすることができます。</p>
<div id="attachment_2517" style="width: 567px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-2517" src="https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-16-32.jpg" alt="php.ini設定のリセット" width="557" height="164" class="size-full wp-image-2517" srcset="https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-16-32.jpg 557w, https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-16-32-300x88.jpg 300w, https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-16-32-320x94.jpg 320w" sizes="(max-width: 557px) 100vw, 557px" /><p id="caption-attachment-2517" class="wp-caption-text">php.ini設定のリセット</p></div>
<h3>さくらインターネットの場合</h3>
<p>さくらインターネットではサーバコントロールパネルの「PHP設定の編集」から設定を変更できます。最初は空なので、追加したい項目（ディレクティブ）のみを記述していくスタイルです。</p>
<div id="attachment_2518" style="width: 529px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-2518" src="https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-18-26.jpg" alt="PHP設定の編集（さくらインターネット）" width="519" height="262" class="size-full wp-image-2518" srcset="https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-18-26.jpg 519w, https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-18-26-300x151.jpg 300w, https://php1st.com/wp-content/uploads/2018/07/2018-07-04-21-18-26-320x162.jpg 320w" sizes="auto, (max-width: 519px) 100vw, 519px" /><p id="caption-attachment-2518" class="wp-caption-text">PHP設定の編集（さくらインターネット）</p></div>
<p>全ドメイン共通の設定になります。</p>
<p>直接ファイルを編集する場合はwwwディレクトリ直下（/home/ユーザー名/www/php.ini）にあります。</p>
<h3>ロリポップの場合</h3>
<p>ロリポップではユーザー専用ページの「サーバーの管理・設定」‐「PHP設定」メニューから設定できます。</p>
<p>ドメインを選んで「設定」ボタンをクリックすると設定画面が開きますが、モジュール版では設定できないのでCGI版に変更する必要があります。</p>
<h2>XAMPPの場合</h2>
<p>ローカル環境でPHPを実行するXAMPPではPHPフォルダにphp.iniが存在します。エディタで開いて変更することができます。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>「Warning: array_key_exists()」と表示されるとき</title>
		<link>https://php1st.com/2406</link>
		
		<dc:creator><![CDATA[西沢直木]]></dc:creator>
		<pubDate>Tue, 18 Jul 2017 23:00:14 +0000</pubDate>
				<category><![CDATA[エラーメッセージ]]></category>
		<guid isPermaLink="false">https://php1st.com/?p=2406</guid>

					<description><![CDATA[array_key_exists関数は配列に指定インデックスが存在するか調べることができます。使用例は次のようになります。 &#60;?php $ar = array(&#34;t&#34;=&#62;&#34;東京&#038; [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>array_key_exists関数は配列に指定インデックスが存在するか調べることができます。使用例は次のようになります。</p>
<pre class="brush: php; gutter: false; title: 配列にインデックスが存在するか調べる; notranslate">
&lt;?php
$ar = array(&quot;t&quot;=&gt;&quot;東京&quot;, &quot;c&quot;=&gt;&quot;千葉&quot;, &quot;k&quot;=&gt;&quot;神奈川&quot;);

if (array_key_exists(&quot;t&quot;, $ar)) {
    echo &quot;キーは存在します。&quot;;
} else {
    echo &quot;キーは存在しません。&quot;;
}
?&gt;
</pre>
<div class="list-title">実行結果</div>
<div class="res">キーは存在します。</div>
<p>array_key_exists関数の第一パラメータはインデックス、第二パラメータは配列を指定しますが、次のような指定をすると「Warning: array_key_exists()」のようなWarningが表示されます。</p>
<pre class="brush: php; gutter: false; title: 第一パラメータに配列を指定した場合; notranslate">
&lt;?php
$ar = array(&quot;t&quot;=&gt;&quot;東京&quot;, &quot;c&quot;=&gt;&quot;千葉&quot;, &quot;k&quot;=&gt;&quot;神奈川&quot;);

if (array_key_exists(array(&quot;t&quot;), $ar)) {
    echo &quot;キーは存在します。&quot;;
} else {
    echo &quot;キーは存在しません。&quot;;
}
?&gt;
</pre>
<p>最初のパラメータは文字列または数値にする必要があるとのエラーメッセージが表示されます。</p>
<div class="list-title">実行結果</div>
<div class="res">Warning: array_key_exists(): The first argument should be either a string or an integer</div>
<pre class="brush: php; gutter: false; highlight: [2]; title: 第二パラメータが配列ではないとき; notranslate">
&lt;?php
$ar = &quot;東京&quot;;

if (array_key_exists(&quot;t&quot;, $ar)) {
    echo &quot;キーは存在します。&quot;;
} else {
    echo &quot;キーは存在しません。&quot;;
}
?&gt;
</pre>
<p>第二パラメータは配列に、というエラーメッセージが表示されます。</p>
<div class="list-title">実行結果</div>
<div class="res">Warning: array_key_exists() expects parameter 2 to be array, string given </div>
<pre class="brush: php; gutter: false; title: 第二パラメータにNULLを指定した場合; notranslate">
&lt;?php
$ar = NULL;

if (array_key_exists(&quot;t&quot;, $ar)) {
    echo &quot;キーは存在します。&quot;;
} else {
    echo &quot;キーは存在しません。&quot;;
}
?&gt;
</pre>
<p>第二パラメータにNULLが指定されている、とのエラーメッセージが表示されます。</p>
<div class="list-title">実行結果</div>
<div class="res">Warning: array_key_exists() expects parameter 2 to be array, null given</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>「Warning: A non-numeric value encountered」と表示されるとき</title>
		<link>https://php1st.com/2398</link>
		
		<dc:creator><![CDATA[西沢直木]]></dc:creator>
		<pubDate>Tue, 18 Jul 2017 10:54:46 +0000</pubDate>
				<category><![CDATA[エラーメッセージ]]></category>
		<guid isPermaLink="false">https://php1st.com/?p=2398</guid>

					<description><![CDATA[PHPのエラーメッセージ「Warning: A non-numeric value encountered」は数値が求められる処理で文字列が指定されている場合などに表示されます。たとえば、次のコードは単純な足し算ですが、 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>PHPのエラーメッセージ「Warning: A non-numeric value encountered」は数値が求められる処理で文字列が指定されている場合などに表示されます。たとえば、次のコードは単純な足し算ですが、変数$bには数値が入っていません。</p>
<pre class="brush: php; gutter: false; title: ; notranslate">
&lt;?php
$a = 100;
$b = &quot;&quot;;
echo $a + $b;
?&gt;
</pre>
<p>変数$bに数値ではない値が入っているので、$a + $bは「Warning: A non-numeric value encountered」になります。</p>
<p>対策はいくつかあります。そもそもWarningなので非表示にすれば済む問題かもしれませんが。それはともかく、次のように型を変換する方法があります。</p>
<pre class="brush: php; gutter: false; title: ; notranslate">
&lt;?php
$a = 100;
$b = (int)&quot;&quot;;
echo $a + $b;
?&gt;
</pre>
<p>これでエラーメッセージは表示されなくなります。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
