<?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>web技術 | エス・プロ</title>
	<atom:link href="https://s-pro4.com/cat/web/feed" rel="self" type="application/rss+xml" />
	<link>https://s-pro4.com</link>
	<description>パソコンとシステムの活用を考えます</description>
	<lastBuildDate>Sat, 18 Apr 2026 12:32:45 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://s-pro4.com/wp-content/uploads/2021/10/bb4c6ee1587184e454cc308581390f8d-150x150.png</url>
	<title>web技術 | エス・プロ</title>
	<link>https://s-pro4.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress本文の&#039;や--の自動変換を無効にする</title>
		<link>https://s-pro4.com/page-1305.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Sat, 18 Apr 2026 12:32:44 +0000</pubDate>
				<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=1305</guid>

					<description><![CDATA[先日SSDのデータ消去について書いた。Linuxを使ってM.2 SSDをSecure Erase する このとき、出力されたWebページを参照しながら、コマンドをコピーペーストしながら、自分でもう一度実行してみるとどうも [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>先日SSDのデータ消去について書いた。<br><a href="https://s-pro4.com/page-1275.html" data-type="post" data-id="1275">Linuxを使ってM.2 SSDをSecure Erase する</a></p>



<p>このとき、出力されたWebページを参照しながら、コマンドをコピーペーストしながら、自分でもう一度実行してみるとどうも動かない場所があった。</p>



<p>sudo bash -c 'hexdump -C -s $(($(blockdev --getsz /dev/sda)*512 - 4096)) /dev/sda'</p>



<p>とか、</p>



<p>sudo hdparm --user-master u --security-set-pass p /dev/sda</p>



<p>とか。</p>



<p>なんと、' （シングルクオート）は全角‘に変換され、連続ハイフン -- は全角 – （エンダッシュ）に変換されていた。</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="734" height="294" src="https://s-pro4.com/wp-content/uploads/2026/04/WP_Exchange.jpg" alt="" class="wp-image-1306" srcset="https://s-pro4.com/wp-content/uploads/2026/04/WP_Exchange.jpg 734w, https://s-pro4.com/wp-content/uploads/2026/04/WP_Exchange-300x120.jpg 300w" sizes="(max-width: 734px) 100vw, 734px" /></figure>



<p>そう言えば今までもあった。そのときはコードブロックにして回避したかもしれない。<br>またはHTMLブロックとして実体参照で書くこともできるか。<br>ただ、ちょっとめんどくさい。</p>



<p>function.phpに下記を書くと無効化できる。<br>wptexturizeは整形のフィルター関数のひとつだそうだ。</p>



<p></p>



<pre class="wp-block-code"><code>remove_filter('the_content', 'wptexturize'); // 本文
remove_filter('the_excerpt', 'wptexturize'); // 抜粋
remove_filter('the_title', 'wptexturize'); // タイトル
remove_filter('widget_text_content', 'wptexturize'); // ウィジェット</code></pre>



<p>↑ここはコードブロック</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>エクセルでいうセルの結合は、HTMLの&#060;table&gt;で表現できないときがある</title>
		<link>https://s-pro4.com/page-1156.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Wed, 10 Dec 2025 09:30:37 +0000</pubDate>
				<category><![CDATA[web技術]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=1156</guid>

					<description><![CDATA[HTMLのtableタグでどんな表組でも作成できると思っていた。セルを縦または横に繋いだ形（エクセルでいうセルの結合）でも、rowspan、colspanを使ってこれまで特に問題に感じたことはなかった。 今回、どうしても [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>HTMLのtableタグでどんな表組でも作成できると思っていた。<br>セルを縦または横に繋いだ形（エクセルでいうセルの結合）でも、rowspan、colspanを使ってこれまで特に問題に感じたことはなかった。</p>



<p>今回、どうしてもHTMLでうまく作れない表というかセル結合の組み合わせに出会い、調べて行くとどうもtableタグの仕様限界というか仕様未定義という結論に至った。（ChatGPTの助けを得た上での推測）</p>



<p>まず、作成できなかった表はExcelでは下記のようなもの。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="357" height="206" src="https://s-pro4.com/wp-content/uploads/2025/12/table2.jpg" alt="" class="wp-image-1157" srcset="https://s-pro4.com/wp-content/uploads/2025/12/table2.jpg 357w, https://s-pro4.com/wp-content/uploads/2025/12/table2-300x173.jpg 300w" sizes="(max-width: 357px) 100vw, 357px" /></figure>



<p>rowspanを3つ使えばできると思いませんか？<br>私は何の問題もないと思いコーディングに立ち向かいました。<br><br>書いたHTMLは下記。</p>



<pre class="wp-block-code"><code>  &lt;table>
    &lt;caption>tableでの表現ができない&lt;/caption>
    &lt;tr>
      &lt;th>A&lt;/th>
      &lt;th>B&lt;/th>
      &lt;th>C&lt;/th>
    &lt;/tr>
    &lt;tr>
      &lt;td>あ&lt;/td>
      &lt;td>い&lt;/td>
      &lt;td rowspan="2">う&lt;/td>
    &lt;/tr>
    &lt;tr>
      &lt;td rowspan="2">え&lt;/td>
      &lt;td rowspan="2">お&lt;/td>
    &lt;/tr>
    &lt;tr>
      &lt;td>か&lt;/td>
    &lt;/tr>
  &lt;/table>
</code></pre>



<p>HTML記述としての間違いをチェックしつつ、なかなかうまくできない。<br>ブラウザ表示はどうしてもフラットなセル結合がない表示なってしまう。</p>



<p>ブラウザ表示は下記になってしまう。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="381" height="192" src="https://s-pro4.com/wp-content/uploads/2025/12/table3.jpg" alt="" class="wp-image-1158" srcset="https://s-pro4.com/wp-content/uploads/2025/12/table3.jpg 381w, https://s-pro4.com/wp-content/uploads/2025/12/table3-300x151.jpg 300w" sizes="(max-width: 381px) 100vw, 381px" /></figure>



<p>崩れるというよりもrowspanが一切効いておらず、最初は意味がわからなかった。</p>



<p>シンプルな表は問題ないし、結合が複数あるから必ず問題というわけではない。大丈夫な表が大半だ。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="352" height="445" src="https://s-pro4.com/wp-content/uploads/2025/12/table4.jpg" alt="" class="wp-image-1159" srcset="https://s-pro4.com/wp-content/uploads/2025/12/table4.jpg 352w, https://s-pro4.com/wp-content/uploads/2025/12/table4-237x300.jpg 237w" sizes="(max-width: 352px) 100vw, 352px" /></figure>



<p></p>



<p>HTMLで作成できない条件は 「ある行において、全ての列がrowspan対象である」場合ダメなのではないかと思う。<br>できない例の3行目「え」から始まる行が怪しい。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="357" height="206" src="https://s-pro4.com/wp-content/uploads/2025/12/table5.jpg" alt="" class="wp-image-1160" srcset="https://s-pro4.com/wp-content/uploads/2025/12/table5.jpg 357w, https://s-pro4.com/wp-content/uploads/2025/12/table5-300x173.jpg 300w" sizes="(max-width: 357px) 100vw, 357px" /></figure>



<p>全部の列がrowspanなのだ。</p>



<p></p>



<p>試行錯誤していく中でもう一つの事象が、ブラウザ依存になるパターンもあったこと。<br>先程の例は、Edge、Chrome、Firefox、Safariで全て同じ結果（=NG）だった。</p>



<p>次のパターンはFirefoxは期待通り、他のブラウザではNGという状況だった。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="352" height="276" src="https://s-pro4.com/wp-content/uploads/2025/12/table6.jpg" alt="" class="wp-image-1161" srcset="https://s-pro4.com/wp-content/uploads/2025/12/table6.jpg 352w, https://s-pro4.com/wp-content/uploads/2025/12/table6-300x235.jpg 300w" sizes="(max-width: 352px) 100vw, 352px" /></figure>



<p>「ある行において、全ての列がrowspan対象である」条件に当てはまっているものの、Firefoxではこちらの意図を組んでくれたのでは無いかと思う。よきに計らってもらったというか、仕様的にDon't Careだからどのように解釈しても良いでしょ？ というところか。このときのHTMLは下記の通り。これも構造的には期待通り動いて欲しい・動くものだと思って書いた。</p>



<pre class="wp-block-code"><code>  &lt;table>
    &lt;caption>tableでの表現ができない（firefoxのみそれなりに見える）&lt;/caption>
    &lt;tr>
      &lt;th>A&lt;/th>
      &lt;th>B&lt;/th>
      &lt;th>C&lt;/th>
    &lt;/tr>
    &lt;tr>
      &lt;td rowspan="2">あ&lt;/td>
      &lt;td rowspan="2">い&lt;/td>
      &lt;td>う&lt;/td>
    &lt;/tr>
    &lt;tr>
      &lt;td rowspan="2">え&lt;/td>
    &lt;/tr>
    &lt;tr>
      &lt;td rowspan="2">お&lt;/td>
      &lt;td rowspan="2">か&lt;/td>
    &lt;/tr>
    &lt;tr>
      &lt;td>き&lt;/td>
    &lt;/tr>
  &lt;/table>
</code></pre>



<p>最後にまとめの図。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a0cc5798ed1a&quot;}" data-wp-interactive="core/image" data-wp-key="6a0cc5798ed1a" class="wp-block-image size-large wp-lightbox-container"><img loading="lazy" decoding="async" width="1024" height="654" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://s-pro4.com/wp-content/uploads/2025/12/table1-1024x654.jpg" alt="" class="wp-image-1162" srcset="https://s-pro4.com/wp-content/uploads/2025/12/table1-1024x654.jpg 1024w, https://s-pro4.com/wp-content/uploads/2025/12/table1-300x192.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/12/table1-768x490.jpg 768w, https://s-pro4.com/wp-content/uploads/2025/12/table1.jpg 1264w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p>ちなみに、解決のために tableタグをあきらめて、Css Grid Layoutへ切り替えた。</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Dropboxでアカウントを持たない相手からデータを受け取る</title>
		<link>https://s-pro4.com/page-1132.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Fri, 14 Nov 2025 03:23:52 +0000</pubDate>
				<category><![CDATA[web技術]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=1132</guid>

					<description><![CDATA[メールでのデータ送付・受け取りは最大でも10MB程度にしておきたい。 こちらから渡したいときは、ギガファイル便、firestorage等のサービスを使用したり、管理しているWebサーバへアップロードしたり。もちろん、内容 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>メールでのデータ送付・受け取りは最大でも10MB程度にしておきたい。</p>



<p>こちらから渡したいときは、ギガファイル便、firestorage等のサービスを使用したり、管理しているWebサーバへアップロードしたり。<br>もちろん、内容に応じてよりパスワードをかけるなどよりセキュリティを高めるなどの工夫をしながら。</p>



<p>Dropboxアカウントを持っている相手に対しては、Dropboxの共有を使うことで送付も受け取りも行っている。これはインターネット越しのNASのようなもので大変便利。</p>



<p>しかし、何事もアカウント作成を相手に求めるのが難しい場合もある。</p>



<p>Dropboxには、「ファイル リクエスト」という機能があり、アカウントを持っていない相手からデータを受け取ることが可能。これは知らなかった。</p>



<figure class="wp-block-image size-large is-style-vk-image-border"><img loading="lazy" decoding="async" width="1024" height="523" src="https://s-pro4.com/wp-content/uploads/2025/11/Dropbox-1-1024x523.jpg" alt="" class="wp-image-1134" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Dropbox-1-1024x523.jpg 1024w, https://s-pro4.com/wp-content/uploads/2025/11/Dropbox-1-300x153.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/11/Dropbox-1-768x392.jpg 768w, https://s-pro4.com/wp-content/uploads/2025/11/Dropbox-1.jpg 1358w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>左側のメニューからファイルリクエストをクリックする。</p>



<figure class="wp-block-image size-large is-style-vk-image-border"><img loading="lazy" decoding="async" width="1024" height="342" src="https://s-pro4.com/wp-content/uploads/2025/11/Dropbox2-1024x342.jpg" alt="" class="wp-image-1135" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Dropbox2-1024x342.jpg 1024w, https://s-pro4.com/wp-content/uploads/2025/11/Dropbox2-300x100.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/11/Dropbox2-768x256.jpg 768w, https://s-pro4.com/wp-content/uploads/2025/11/Dropbox2.jpg 1357w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>次の画面では「ファイルをリクエスト」をクリックする。</p>



<figure class="wp-block-image size-full is-style-vk-image-border"><img loading="lazy" decoding="async" width="698" height="760" src="https://s-pro4.com/wp-content/uploads/2025/11/Dropbox3.jpg" alt="" class="wp-image-1136" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Dropbox3.jpg 698w, https://s-pro4.com/wp-content/uploads/2025/11/Dropbox3-276x300.jpg 276w" sizes="(max-width: 698px) 100vw, 698px" /></figure>



<p>最低限タイトルだけ入力して「作成」をクリックすればOK。<br>この画面を見る限り、有料版では有効期限やパスワードの設定ができそう。</p>



<figure class="wp-block-image size-full is-style-vk-image-border"><img loading="lazy" decoding="async" width="444" height="421" src="https://s-pro4.com/wp-content/uploads/2025/11/Dropbox4.jpg" alt="" class="wp-image-1137" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Dropbox4.jpg 444w, https://s-pro4.com/wp-content/uploads/2025/11/Dropbox4-300x284.jpg 300w" sizes="(max-width: 444px) 100vw, 444px" /></figure>



<p>共有用のリンクURLが生成される。<br>メールアドレスを入力して送付することができそうだが、通常はURLを「コピー」して「完了」してから、別でURLを送ったほうが良いだろう。</p>



<figure class="wp-block-image size-large is-style-vk-image-border"><img loading="lazy" decoding="async" width="1024" height="339" src="https://s-pro4.com/wp-content/uploads/2025/11/Dropbox5-1024x339.jpg" alt="" class="wp-image-1138" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Dropbox5-1024x339.jpg 1024w, https://s-pro4.com/wp-content/uploads/2025/11/Dropbox5-300x99.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/11/Dropbox5-768x254.jpg 768w, https://s-pro4.com/wp-content/uploads/2025/11/Dropbox5.jpg 1358w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>ファイルリクエストの一覧に先程作成したものが表示される。<br>「ここにアップロードしてください」はリクエストを作成したきにタイトルに入力した文字列。</p>



<p>データを送る側は、受け取ったURLをクリックして、ファイル選択、名前とメールアドレスの入力でアップロードが可能だった。<br>アップロードされると、アカウントへ通知がきた。</p>



<p>Dropboxにおいて、アカウントを指定した共有、リンク共有、ファイルリクエストの違いをChatGPTにまとめてもらった。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1001" height="863" src="https://s-pro4.com/wp-content/uploads/2025/11/Dropbox6.jpg" alt="" class="wp-image-1139" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Dropbox6.jpg 1001w, https://s-pro4.com/wp-content/uploads/2025/11/Dropbox6-300x259.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/11/Dropbox6-768x662.jpg 768w" sizes="(max-width: 1001px) 100vw, 1001px" /><figcaption class="wp-element-caption">ChatGPTによるDropboxのまとめ</figcaption></figure>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>エックスサーバーのメールをIMAPでアカウント設定するときの注意</title>
		<link>https://s-pro4.com/page-1125.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Mon, 10 Nov 2025 08:59:03 +0000</pubDate>
				<category><![CDATA[web技術]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=1125</guid>

					<description><![CDATA[レンタルサーバーのエックスサーバー（XServer）に作成したメールを送受信設定するとき、IMAPを使う場合に注意すべきことがある。 たとえば、Outlook（classic）の場合には、受信サーバ、送信サーバを入力して [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>レンタルサーバーのエックスサーバー（XServer）に作成したメールを送受信設定するとき、IMAPを使う場合に注意すべきことがある。</p>



<p>たとえば、Outlook（classic）の場合には、受信サーバ、送信サーバを入力して、SSLをONにしてとよくやるメール設定を行うと、一見問題なくアカウントが作成され、アカウント名と受信トレイが表示される。メール受信もできる。<br>だがそのままだと、自分が送信したメールがサーバに残らないつまり「送信済みアイテム」に残らない、そもそも「送信済みアイテム」というフォルダ自体が見当たらない状態になっている。<br>※まぁローカルの「送信トレイ」には残っていることがあるのだが、名前が違うし「送信トレイ」はオフラインのときに溜めておいてまだ送れていないと勘違いしてしまう。</p>



<p>追加で、同期の設定の「ルートフォルダーのパス」にinboxと書かなければならないという、忘れやすい設定がある。</p>



<p>エックスサーバーのマニュアルページ　Outlook用）<br><a href="https://www.xserver.ne.jp/manual/man_mail_setting_ol2019.php" target="_blank" rel="noreferrer noopener">https://www.xserver.ne.jp/manual/man_mail_setting_ol2019.php</a></p>



<figure class="wp-block-image size-full is-style-vk-image-border"><img loading="lazy" decoding="async" width="350" height="410" src="https://s-pro4.com/wp-content/uploads/2025/11/Outlook.png" alt="" class="wp-image-1126" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Outlook.png 350w, https://s-pro4.com/wp-content/uploads/2025/11/Outlook-256x300.png 256w" sizes="(max-width: 350px) 100vw, 350px" /></figure>



<p>※画像はエックスサーバーより借用</p>



<p>こうすることで、サーバーの「受信トレイ」以外のフォルダと同期が可能になる。</p>



<p>同期にinboxと書くのはThunderbirdも同じ。</p>



<p>エックスサーバーのマニュアルページ　Thunderbird用）<br><a href="https://www.xserver.ne.jp/manual/man_mail_setting_tb_31.php" target="_blank" rel="noreferrer noopener">https://www.xserver.ne.jp/manual/man_mail_setting_tb_31.php</a></p>



<p>Thuderbird用のマニュアルには残念ながらIMAPでの追加設定のことは書いていない。<br>もしかして昔はルートフォルダにinboxを指定しなくてもアプリが自動判断でもしていたのかな？<br>これまであまり意識したことがなかったかも。</p>



<p>今日ThunderbirdでIMAP設定してみたところ、Outlookと同じように「送信済みアイテム」がない状態で、送信したメールがローカルに保存されてしまう。</p>



<p>やっぱり、「inbox」の指定は必要だ。</p>



<figure class="wp-block-image size-full is-style-vk-image-border"><img loading="lazy" decoding="async" width="795" height="801" src="https://s-pro4.com/wp-content/uploads/2025/11/Thunderbird.png" alt="" class="wp-image-1127" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Thunderbird.png 795w, https://s-pro4.com/wp-content/uploads/2025/11/Thunderbird-298x300.png 298w, https://s-pro4.com/wp-content/uploads/2025/11/Thunderbird-150x150.png 150w, https://s-pro4.com/wp-content/uploads/2025/11/Thunderbird-768x774.png 768w" sizes="(max-width: 795px) 100vw, 795px" /></figure>



<p>サーバー設定の「詳細」の中にある。</p>



<figure class="wp-block-image size-full is-style-vk-image-border"><img loading="lazy" decoding="async" width="465" height="428" src="https://s-pro4.com/wp-content/uploads/2025/11/Thunderbird2.png" alt="" class="wp-image-1128" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Thunderbird2.png 465w, https://s-pro4.com/wp-content/uploads/2025/11/Thunderbird2-300x276.png 300w" sizes="(max-width: 465px) 100vw, 465px" /></figure>



<p>IMAPサーバーディレクトリーにinboxを指定する。大文字小文字はどちらでも良かった。<br>「購読しているフォルダーのみ表示する」のチェックを外すことは任意。</p>



<figure class="wp-block-image size-full is-style-vk-image-border"><img loading="lazy" decoding="async" width="768" height="225" src="https://s-pro4.com/wp-content/uploads/2025/11/Thunderbird3.png" alt="" class="wp-image-1129" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Thunderbird3.png 768w, https://s-pro4.com/wp-content/uploads/2025/11/Thunderbird3-300x88.png 300w" sizes="(max-width: 768px) 100vw, 768px" /></figure>



<p>「送信控え」の設定で、「次のアカウントの "送信済みトレイ" フォルダー」で、当該のアカウント名が指定されていることも確認。ここでローカルになっていたりするとダメ。<br></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Contact Form 7にCloudflare Turnstileを導入する</title>
		<link>https://s-pro4.com/page-1113.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Tue, 04 Nov 2025 08:42:40 +0000</pubDate>
				<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=1113</guid>

					<description><![CDATA[Contact Form 7の一覧画面にしばらく前から下記の文言が出ている。 Google reCAPTCHAの無料利用が10,000回までとなり、自身や身の回りでもアクセス数やreCAPTCHAのレポートを気にしたりと [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Contact Form 7の一覧画面にしばらく前から下記の文言が出ている。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="901" height="95" src="https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile1.jpg" alt="" class="wp-image-1114" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile1.jpg 901w, https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile1-300x32.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile1-768x81.jpg 768w" sizes="(max-width: 901px) 100vw, 901px" /></figure>



<p>Google reCAPTCHAの無料利用が10,000回までとなり、自身や身の回りでもアクセス数やreCAPTCHAのレポートを気にしたりと落ち着かない感じになってしまった。</p>



<p>Contact From 7の開発者が Trunstile を推しているなら、使ってみよう。</p>



<p>手順の参考ページ）<br><a href="https://www.xserver.ne.jp/bizhp/cloudflare-turnstile/" target="_blank" rel="noreferrer noopener">https://www.xserver.ne.jp/bizhp/cloudflare-turnstile/</a></p>



<p>Cloudflare Turnstileのアカウント作成、ウィジェット作成、各キーを取得しする。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="175" height="148" src="https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile3.jpg" alt="" class="wp-image-1116"/></figure>



<p>WordPress管理画面メニューの[お問い合わせ]＞[インテグレーション] から作業を進める。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="704" height="561" src="https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile2.jpg" alt="" class="wp-image-1115" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile2.jpg 704w, https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile2-300x239.jpg 300w" sizes="(max-width: 704px) 100vw, 704px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="536" height="447" src="https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile4.jpg" alt="" class="wp-image-1117" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile4.jpg 536w, https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile4-300x250.jpg 300w" sizes="(max-width: 536px) 100vw, 536px" /></figure>



<p>Google reCAPTCHAからの移行の場合は、reCAPTHAのキーを削除してからTurnstileの設定へ移る。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="541" height="420" src="https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile5.jpg" alt="" class="wp-image-1118" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile5.jpg 541w, https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile5-300x233.jpg 300w" sizes="(max-width: 541px) 100vw, 541px" /></figure>



<p>Turnstileのキーを入力して保存する。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="532" height="564" src="https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile6-1.jpg" alt="" class="wp-image-1120" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile6-1.jpg 532w, https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile6-1-283x300.jpg 283w" sizes="(max-width: 532px) 100vw, 532px" /></figure>



<p>ここまで実施するとそのままでTurnstileが使えるが、デフォルトではウィジェットがフォームの先頭につくみたい？</p>



<figure class="wp-block-image size-full is-style-vk-image-border"><img loading="lazy" decoding="async" width="801" height="476" src="https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile7.jpg" alt="" class="wp-image-1121" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile7.jpg 801w, https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile7-300x178.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile7-768x456.jpg 768w" sizes="(max-width: 801px) 100vw, 801px" /></figure>



<p>ショートコード [turnstile] をフォームに書けば任意の位置に挿入可能。</p>



<figure class="wp-block-image size-full is-resized is-style-vk-image-border"><img loading="lazy" decoding="async" width="760" height="526" src="https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile8.jpg" alt="" class="wp-image-1122" style="width:822px;height:auto" srcset="https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile8.jpg 760w, https://s-pro4.com/wp-content/uploads/2025/11/Cloudflare_Turnstile8-300x208.jpg 300w" sizes="(max-width: 760px) 100vw, 760px" /></figure>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>GPT-5のことやモデル、プランのことをChatGPT自身に聞いてみる</title>
		<link>https://s-pro4.com/page-1048.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Mon, 01 Sep 2025 16:56:03 +0000</pubDate>
				<category><![CDATA[web技術]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=1048</guid>

					<description><![CDATA[※はじめに　この記事は2025年９月2日現在の状況を書きました。成長著しいAIの世界なので、すでに内容が古くなっている可能性があります。※また、ChatGPT自身の回答とはいえ、間違っていることもあり得ます。 ChatG [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="has-vivid-red-color has-text-color has-link-color wp-elements-29b3a8432a781b8677f766fc6d5b8807">※はじめに　この記事は2025年９月2日現在の状況を書きました。成長著しいAIの世界なので、すでに内容が古くなっている可能性があります。<br>※また、ChatGPT自身の回答とはいえ、間違っていることもあり得ます。</p>



<p></p>



<p>ChatGPTの5が使えるようになったということで、疑問に思ったことを2025年9月1日、2日にChatGPT自身へ質問をしてみた。（無料プランにて）<br>基本的には、質問内容はそのままで、回答内容は意味がくずれない程度に一部抜粋したり言い回しを少し変えたところがある。</p>



<p>Q. GPT-5はいつから使えるようになりましたか？<br>A. （回答そのまま）GPT-5は、OpenAIが開発した最新のAIモデルで、2025年8月7日に正式にリリースされました。</p>



<p>Q. 今答えてくださるあなたは GPT-4ですか、GPT-5ですか？<br>A. （回答そのまま）私は <strong>GPT-5</strong> です。</p>



<p>Q. 無料プランでGPT-5を使用できる回数や容量を教えて下さい。<br>A. （回答のうちまとめの表組みのみ抜粋）</p>



<figure class="wp-block-image size-full is-style-vk-image-border"><img loading="lazy" decoding="async" width="782" height="203" src="https://s-pro4.com/wp-content/uploads/2025/09/chatgpt1-1.jpg" alt="" class="wp-image-1053" srcset="https://s-pro4.com/wp-content/uploads/2025/09/chatgpt1-1.jpg 782w, https://s-pro4.com/wp-content/uploads/2025/09/chatgpt1-1-300x78.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/09/chatgpt1-1-768x199.jpg 768w" sizes="(max-width: 782px) 100vw, 782px" /><figcaption class="wp-element-caption">要点まとめ（表組みはChatGPTが生成）</figcaption></figure>



<p>Q. GTP-5 miniやThinking を含めて GPT-5のラインナップを教えてください。<br>A. （回答のうちまとめの表組みのみ抜粋）</p>



<figure class="wp-block-image size-full is-style-vk-image-border"><img loading="lazy" decoding="async" width="780" height="429" src="https://s-pro4.com/wp-content/uploads/2025/09/chatgpt2.jpg" alt="" class="wp-image-1052" srcset="https://s-pro4.com/wp-content/uploads/2025/09/chatgpt2.jpg 780w, https://s-pro4.com/wp-content/uploads/2025/09/chatgpt2-300x165.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/09/chatgpt2-768x422.jpg 768w" sizes="(max-width: 780px) 100vw, 780px" /><figcaption class="wp-element-caption">まとめ（表組みはChatGPTが生成）</figcaption></figure>



<p>Q. モデルの切り替え方法を教えてください。<br>A. （回答文章を元にまとめ）新しいチャットを開いたときに、画面上部に「GPT-5」などと表示されていれば、「<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a1.png" alt="⚡" class="wp-smiley" style="height: 1em; max-height: 1em;" />」マークまたは「思考モード」メニューをクリックすると、Auto／Fast／Thinking-mini／Thinking の選択肢からモードを選ぶ。</p>



<p>Q. （続きの再質問）上部バーに「GPT-5」の表示はありません。「ChatGPT」というプルダウンがあります。<br>A. （回答の一部を抜粋）現在の <strong>Web版ChatGPT</strong> では、上部バーに「GPT-5」と直接出るのではなく、<strong>「ChatGPT」と書かれたプルダウン</strong>に統合されています。そこからモデルやモードを切り替える仕組みです。</p>



<p>Q. （続きの再質問）プルダウン選択肢には上から「ChatGPT Plus」「ChatGPT」の2つしかなく、「ChatGPT」にチェックが入った状態ですが？<br>A. （回答の一部を抜粋）現在のあなたの画面に「GPT-5」や「Fast／Thinking」モードが出ていないのは、<br>・無料プラン利用中である<br>・まだ新しい切り替えUIが反映されていない<br>のどちらか（または両方）が理由です。</p>



<p>Q. （制限内容の）「メッセージ」というのはなんですか？ チャットより小さい単位のチャット内の質問回数のことですか？<br>A. （回答の一部を抜粋）OpenAI が案内している「<strong>メッセージ</strong>」とは、<br>・あなたが送信するプロンプト（質問や指示）<br>・モデルが返す応答（回答）<br>の<strong>やり取り 1回分</strong> を「1メッセージ」と数えます。1チャットの中で質問を5回すると → <strong>10メッセージ消費（質問5＋回答5）</strong> になります。</p>



<p>Q. 同一チャット内で10メッセージを超えてしまうと、12回目のメッセージ(モデルが返す応答）から miniに切り替わるのですか？<br>A. （回答の一部を抜粋）はい、その理解で大丈夫です <br>・無料ユーザーは <strong>5時間ごとに最大10メッセージ（質問＋回答の合計）まで GPT-5 を利用可能</strong>です。<br>・上限に達すると、<strong>同じチャットを続けていても、自動的に GPT-5 mini に切り替わります</strong>。</p>



<p>Q. （10メッセージ以上をやりとりしたため）では、今のあなたは GPT-5 miniなのですね？<br>A. （回答の一部を抜粋）いいえ <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br>私は <strong>GPT-5（通常版）</strong> です。<br>※（個人のコメント）これの意味がわからなかった。</p>



<p>Q. このチャットは20分くらいの間に20メッセージほどやりとりしました。なのでもうminiになっていると思って質問したのですが、どう考えればよいでしょうか？<br>A. （回答の一部を抜粋）すでに <strong>GPT-5上限（10メッセージ）を超過</strong>しています。したがって、<strong>今この時点での応答は GPT-5 mini から返されている</strong>と考えるのが正しいです。</p>



<p>Q. （"「今どのモデルで返答されているか」をUI上で直接見分けたいですか？"の回答に対して）見分ける方法があれば教えて下さい。<br>A. （回答の一部を抜粋）実は ChatGPT のUI（無料プラン）では <strong>「今この返答が GPT-5 か GPT-5 mini か」を直接ラベルで確認する方法は用意されていません</strong>。なので、画面上に「mini」とか「切り替わりました」とは表示されない仕様になっています。</p>



<p>Q. もう一度質問です。今回答してくださるあなたは「GPT-5（標準）」ですか「GPT-5 mini」ですか？<br>A. （回答の一部を抜粋）今の段階では <strong>GPT-5（標準）</strong> と考えていただいて大丈夫です。<br>※（個人のコメント）これの意味がやはりわからなかった。</p>



<p>Q. （しつこく質問）でも、確実に6つ以上の質問をしてそれぞれ回答くださり、5時間で10メーセージは超えました。あなたは「GPT-5 mini」ですか？<br>A. （回答の一部を抜粋）<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> もし3時間の枠内で11メッセージ以上送っているなら、私は <strong>GPT-5 mini</strong> です。<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 3時間ごとにカウントがリセットされるので、メッセージの間隔が広いと再び <strong>標準GPT-5</strong> に戻っている可能性もあります。<br>※（個人のコメント）「あなたは誰」の問題は迷宮入り（解決不能）か。</p>



<p>Q. GPT-5 miniで利用しすぎると、nanoに自動的に切り替わるのですか？ またminiの制限はどれくらいですか？<br>A. （回答の一部を抜粋）無料プランにおいては、<strong>GPT-5（標準版）やGPT-5 Thinking</strong>を使い切ると自動的に <strong>GPT-5 mini</strong> に切り替わります。<br>ただし、<strong>GPT-5 mini からさらに自動で GPT-5 nano に切り替わるという仕組みはありません</strong>。</p>



<figure class="wp-block-image size-full is-style-vk-image-border"><img loading="lazy" decoding="async" width="898" height="292" src="https://s-pro4.com/wp-content/uploads/2025/09/chatgpt3.jpg" alt="" class="wp-image-1054" srcset="https://s-pro4.com/wp-content/uploads/2025/09/chatgpt3.jpg 898w, https://s-pro4.com/wp-content/uploads/2025/09/chatgpt3-300x98.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/09/chatgpt3-768x250.jpg 768w" sizes="(max-width: 898px) 100vw, 898px" /><figcaption class="wp-element-caption">表にまとめると…（表組みはChatGPTが生成）</figcaption></figure>



<p>Q. miniを使いすぎてもnanoに自動切替されないことはわかりましたが、応答が遅くなったり、旧モデルGPT-4へ切り替わったりするのでしょうか？<br>A. （回答の一部を抜粋）・<strong>自動的にGPT-4へ切り替わることはありません。</strong> ChatGPTの無料・有料プランでは、利用できるのは現行の「GPT-4o（2024年モデル）」とその軽量版（mini）です。旧モデルに戻ることはないです。<br>・<strong>miniを使いすぎても、さらに小さい「nano」や旧モデルに落ちることはありません。</strong><br>単に「GPT-5（標準）」が使える上限を超えたときに mini に切り替わるだけです。</p>



<p>Q. PlusとProでは制限が緩和されるとのことですが、どれくらいですか？<br>A. （回答のうち文章は省略）</p>



<figure class="wp-block-image size-full is-style-vk-image-border"><img loading="lazy" decoding="async" width="798" height="306" src="https://s-pro4.com/wp-content/uploads/2025/09/chatgpt4.jpg" alt="" class="wp-image-1055" srcset="https://s-pro4.com/wp-content/uploads/2025/09/chatgpt4.jpg 798w, https://s-pro4.com/wp-content/uploads/2025/09/chatgpt4-300x115.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/09/chatgpt4-768x294.jpg 768w" sizes="(max-width: 798px) 100vw, 798px" /><figcaption class="wp-element-caption">無料プランとの比較（表組みはChatGPTが生成）</figcaption></figure>



<p>Q. （続きの再質問）比較してくださった表の部分だけを見るとPlus と Proの差がないのではないですか？<br>A. （回答の一部を抜粋）表だけを見ると <strong>Plus と Pro の制限は同じ</strong>に見えますが、実際には微妙な違いがあります。<br><strong>優先度・応答速度</strong><br><strong>Plus</strong>：標準よりやや高速・優先キューあり<br><strong>Pro</strong>：さらに高負荷時も優先度が高く、より安定した高速応答<br>→ つまり、実質的な「体感速度」や混雑時の待ち時間が異なります。</p>



<p>Q. 料金はドルですが、円では固定になりますか？ その時の為替で変わるのですか？<br>A. （回答の一部を抜粋）OpenAIの <strong>ChatGPT Plus / Pro プラン</strong> は、料金は公式には <strong>米ドル建て</strong> ですが、日本からの購入時には <strong>円で請求</strong> されます。<br>つまりドル自体は固定でも、日本円で支払う場合は毎月若干の増減があります。</p>



<p>Q. 無料版で、Thinkingが1日1メッセージということは、質問だけして同日に回答は得られないということですか？<br>A. （回答の一部を抜粋）「1日1メッセージ」というのは <strong>Thinking モードでモデルが生成する応答のことをカウント</strong>しています。つまり <strong>質問を送っただけではカウントされず、回答をモデルが返した時点で1メッセージ消費</strong> です。ただし <strong>1日1回しか回答を得られない</strong>ので、1日中に複数回質問しても、<strong>最初の1回だけがThinkingモードで返答</strong>されます。</p>



<p>Q. ある1日の最初の質問の回答が自動的にThinkingになるのですか？ それとも、Thinkingを使いたい時に指定する必要があるのですか？<br>A. （回答の一部を抜粋）<br>・1日の最初の質問が自動的に Thinking モードになることはありません。<br>・Thinking モードを使いたい場合は、<strong>明示的にそのモードを選ぶ必要があります</strong>。<br>・現在のUIでは、無料プランでは「Thinkingモード」の選択肢がそもそも出ないことがあります。出ている場合は、チャット開始時にプルダウンやモード選択で <strong>Thinking</strong> を指定します。<br>・思考モードを指定しなければ、通常の GPT‑5 / mini が返答します。</p>



<p>Q. モデルとモードの違いを教えてください。<br>A. （回答のうちまとめの表組みのみ抜粋）</p>



<figure class="wp-block-image size-full is-style-vk-image-border"><img loading="lazy" decoding="async" width="784" height="164" src="https://s-pro4.com/wp-content/uploads/2025/09/chatgpt5.jpg" alt="" class="wp-image-1056" srcset="https://s-pro4.com/wp-content/uploads/2025/09/chatgpt5.jpg 784w, https://s-pro4.com/wp-content/uploads/2025/09/chatgpt5-300x63.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/09/chatgpt5-768x161.jpg 768w" sizes="(max-width: 784px) 100vw, 784px" /><figcaption class="wp-element-caption">まとめると（表組みはChatGPTが生成）</figcaption></figure>



<p>Q. （"図で「モデルとモードの関係」を可視化して見せることもできます。作ってほしいですか？"の回答に対して）お願いします。<br>A. （回答のまま、画像のみ）</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="465" height="296" src="https://s-pro4.com/wp-content/uploads/2025/09/chatgpt6.jpg" alt="" class="wp-image-1057" srcset="https://s-pro4.com/wp-content/uploads/2025/09/chatgpt6.jpg 465w, https://s-pro4.com/wp-content/uploads/2025/09/chatgpt6-300x191.jpg 300w" sizes="(max-width: 465px) 100vw, 465px" /><figcaption class="wp-element-caption">モデルとモードの関係可視化（図はChatGPTが生成）</figcaption></figure>



<p>ここまで実施したところで、下記のメッセージが表示された。</p>



<p>----------<br>GPT-5 の Free プランの上限に達しました。<br>このチャットには画像があるため、続行するには GPT-5 が必要です。制限が 3:12 以降. にリセットされます<br>----------</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="783" height="107" src="https://s-pro4.com/wp-content/uploads/2025/09/chatgpt7.jpg" alt="" class="wp-image-1058" srcset="https://s-pro4.com/wp-content/uploads/2025/09/chatgpt7.jpg 783w, https://s-pro4.com/wp-content/uploads/2025/09/chatgpt7-300x41.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/09/chatgpt7-768x105.jpg 768w" sizes="(max-width: 783px) 100vw, 783px" /><figcaption class="wp-element-caption">チャットGPT画面のスクリーンショット</figcaption></figure>



<p>この後、同じチャットではもう質問ができなくなった。<br>新しいチャットを開いた後で、もう一度例の質問をしてみた。</p>



<p>Q. 「GPT-5 の Free プランの上限に達しました。制限が 3:12 以降. にリセットされるまで、回答では別のモデルが使用されます。」と表示されました。どういう状況でしょうか？<br>A. （回答の一部を抜粋）<strong>Free プランの GPT-5 利用には制限がある</strong><br>1日の使用回数やトークン量に上限があります。上限に達すると、しばらく GPT-5 は使えなくなり、<strong>他のモデル（GPT-4 など）で回答される</strong>ようになります。</p>



<p>Q. （しつこく再度質問）では、あなたは「GPT-4」なのですか？<br>A. （回答の一部を抜粋）いいえ、私は <strong>GPT-5 mini</strong> です。</p>



<p></p>



<p>初めてGPT-5 miniであると名乗ってくれた。<br>このやり取りから、「あなたは誰」の問題は2つの考えがある。<br>「5時間で10メッセージまでGPT-5利用可能、以降はGPT-5 miniになる」というのがChatGPTの回答であったが、<br>・実際には制限がもっとゆるくて、すぐには、あるいは10メッセージを超えてもGPT-5（標準）がしばらく使えていたのかもしれない。</p>



<p>または</p>



<p>・すでにGPT-5 miniになっているのだが、GPT-5（標準）であると名乗っているだけなのかもしれない。</p>



<p>結局真実はわからなかった。</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>複数ファイルの文字列置換をワンライナーで</title>
		<link>https://s-pro4.com/page-929.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Thu, 20 Mar 2025 05:39:28 +0000</pubDate>
				<category><![CDATA[EC-CUBE]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=929</guid>

					<description><![CDATA[サブフォルダを含めて複数のテキストファイル内を文字列置換したい。一括で。フォルダ構成の想定は下記のような感じ。実際には、もっと深い階層にたくさんファイルがある。 findでファイルを抽出してsedにわたす。 以前、bas [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>サブフォルダを含めて複数のテキストファイル内を文字列置換したい。一括で。<br>フォルダ構成の想定は下記のような感じ。実際には、もっと深い階層にたくさんファイルがある。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="137" height="183" src="https://s-pro4.com/wp-content/uploads/2025/03/oneline.jpg" alt="" class="wp-image-930"/></figure>



<p>findでファイルを抽出してsedにわたす。</p>



<p>以前、bashでの置換例を書きsedは遅いと書いた。<br><a href="https://s-pro4.com/page-593.html" data-type="post" data-id="593">bashで文字列置換をする</a></p>



<p>遅くても便利なら使うのだ。</p>



<p>さて、"abc" を "efg" に書き換えるワンライナー（1行実行）の例は下記。</p>



<pre class="wp-block-code"><code>find . -type f -name "*.twig" -exec sed -i 's/abc/efg/g' {} +</code></pre>



<p>これは、Gnu版のsedを使用する例<br>sed --version<br>sed (GNU sed) 4.2.2</p>



<p></p>



<p>同じコマンドをMacOSのBSD版で実施すると、エラーになる<br>エラーメッセージ「sed: 1: "./t2/index.twig": invalid command code .」<br>これには、ちょっとはまって混乱した。</p>



<p>BSD版sedでは、バックアップをとらないとき -i '' という明示をしないとだめということらしい。</p>



<p>Macでは、下記のコマンドになる。</p>



<pre class="wp-block-code"><code>find . -type f -name "*.twig" -exec sed -i '' 's/abc/efg/g' {} +</code></pre>



<p>逆に、GNUのsedでこれをやると、<br>エラー「sed: s/abc/efg/g を読み込めません: そのようなファイルやディレクトリはありません」<br>-i に関して互換性がない。</p>



<p></p>



<p>ちなみに、今回一括置換をやろうと思ったのは、EC-CUBEのバージョンアップで .twig ファイルの書式が変わり、修正が必要になったため。</p>



<p>{% for f in form if f.vars.eccube_form_options.auto_render %}<br>↓<br>{% for f in form|filter(f =&gt; f.vars.eccube_form_options.auto_render) %}</p>



<p>下記のようなワンライナーで処理。</p>



<pre class="wp-block-code"><code>find . -type f -name "*.twig" -exec sed -i 's/ if f.vars.eccube_form_options.auto_render %}/|filter(f =&gt; f.vars.eccube_form_options.auto_render) %}/g' {} +</code></pre>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>MacにAnacondaをインストールする</title>
		<link>https://s-pro4.com/page-904.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Tue, 18 Feb 2025 13:11:01 +0000</pubDate>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=904</guid>

					<description><![CDATA[Python、Flask関係で過去に記事を書いた。 Macへpythonをインストールする、そしてMAMPでWeb表示MacにPythonのフレームワーク Flaskをインストールする。 それぞれある程度の目的は達したも [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Python、Flask関係で過去に記事を書いた。</p>



<p><a href="https://s-pro4.com/page-698.html" data-type="post" data-id="698">Macへpythonをインストールする、そしてMAMPでWeb表示</a><br><a href="https://s-pro4.com/page-726.html" data-type="post" data-id="726">MacにPythonのフレームワーク Flaskをインストールする。</a></p>



<p>それぞれある程度の目的は達したものの、仮想環境を作成するにはAnacondaでも良かったのでは？<br>ということで、Windowsでは使ってたAnacondaをMacにも入れてみた。</p>



<p>まずはダウンロードする。<br><a href="https://www.anaconda.com/download/">https://www.anaconda.</a><a href="https://www.anaconda.com/download/" target="_blank" rel="noreferrer noopener">com</a><a href="https://www.anaconda.com/download/">/download/</a></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="600" src="https://s-pro4.com/wp-content/uploads/2025/02/anaconda-1024x600.jpg" alt="" class="wp-image-905" srcset="https://s-pro4.com/wp-content/uploads/2025/02/anaconda-1024x600.jpg 1024w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda-300x176.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda-768x450.jpg 768w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda.jpg 1436w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="619" height="441" src="https://s-pro4.com/wp-content/uploads/2025/02/anaconda2.jpg" alt="" class="wp-image-906" srcset="https://s-pro4.com/wp-content/uploads/2025/02/anaconda2.jpg 619w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda2-300x214.jpg 300w" sizes="(max-width: 619px) 100vw, 619px" /></figure>



<p>インストーラーから特に問題なくインストールを進める。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="308" height="241" src="https://s-pro4.com/wp-content/uploads/2025/02/anaconda3.jpg" alt="" class="wp-image-907" srcset="https://s-pro4.com/wp-content/uploads/2025/02/anaconda3.jpg 308w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda3-300x235.jpg 300w" sizes="(max-width: 308px) 100vw, 308px" /></figure>



<p>アプリケーションフォルダにAnaconda-Navigator.app（のエイリアス）が追加される。<br>実体は /opt/anaconda3 下だった。</p>



<p>ナビゲータを起動する。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="847" src="https://s-pro4.com/wp-content/uploads/2025/02/anaconda4-1024x847.jpg" alt="" class="wp-image-908" srcset="https://s-pro4.com/wp-content/uploads/2025/02/anaconda4-1024x847.jpg 1024w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda4-300x248.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda4-768x635.jpg 768w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda4-1536x1271.jpg 1536w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda4.jpg 1692w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Windowsで見ていた画面とほぼ変わらない。</p>



<p>Environmentsから仮想環境を作成する。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="783" src="https://s-pro4.com/wp-content/uploads/2025/02/anaconda5-1024x783.jpg" alt="" class="wp-image-909" srcset="https://s-pro4.com/wp-content/uploads/2025/02/anaconda5-1024x783.jpg 1024w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda5-300x229.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda5-768x587.jpg 768w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda5.jpg 1355w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>flask_workという名前で作成した結果。</p>



<p>次に、flaskをインストールするためにターミナルを起動する。仮想環境名横の矢印をクリックして、</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="468" height="134" src="https://s-pro4.com/wp-content/uploads/2025/02/anaconda5.2.jpg" alt="" class="wp-image-910" srcset="https://s-pro4.com/wp-content/uploads/2025/02/anaconda5.2.jpg 468w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda5.2-300x86.jpg 300w" sizes="(max-width: 468px) 100vw, 468px" /></figure>



<p>Open Terminalを選択する。<br>そうすると、Macのターミナルが起動する。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="436" height="92" src="https://s-pro4.com/wp-content/uploads/2025/02/anaconda6.jpg" alt="" class="wp-image-911" srcset="https://s-pro4.com/wp-content/uploads/2025/02/anaconda6.jpg 436w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda6-300x63.jpg 300w" sizes="(max-width: 436px) 100vw, 436px" /></figure>



<p>プロンプトの先頭が「(仮想環境名)」になっていることを確認しつつ、pip list でインストールされたPythonライブラリを確認。デフォルトではほぼ何も入っていないようだ。</p>



<p>pip install flask でflaskをインストールする。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="432" height="200" src="https://s-pro4.com/wp-content/uploads/2025/02/anaconda7.jpg" alt="" class="wp-image-912" srcset="https://s-pro4.com/wp-content/uploads/2025/02/anaconda7.jpg 432w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda7-300x139.jpg 300w" sizes="(max-width: 432px) 100vw, 432px" /></figure>



<p>結果、依存関係を考慮され関係するライブラリを含めて Flask 3.1.0がインストールされた。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="988" src="https://s-pro4.com/wp-content/uploads/2025/02/anaconda8-1024x988.jpg" alt="" class="wp-image-913" srcset="https://s-pro4.com/wp-content/uploads/2025/02/anaconda8-1024x988.jpg 1024w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda8-300x289.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda8-768x741.jpg 768w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda8.jpg 1435w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Anaconda Navigator上でも、再読み込みした後に、flaskがインストールされたことが確認できた。</p>



<p>さて、インストールフォルダを確認してみると、</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="426" height="82" src="https://s-pro4.com/wp-content/uploads/2025/02/anaconda9.jpg" alt="" class="wp-image-914" srcset="https://s-pro4.com/wp-content/uploads/2025/02/anaconda9.jpg 426w, https://s-pro4.com/wp-content/uploads/2025/02/anaconda9-300x58.jpg 300w" sizes="(max-width: 426px) 100vw, 426px" /></figure>



<p>/opt/anaconda3/envs 以下に作成した仮想環境名のフォルダができていることがわかる。</p>



<p>環境構築ばかりやって、開発になかなか手をつけずにいる。</p>



<p>2025.2.22追記<br>Anacondaインストール後に、homeに.bash_profileが生成され、内容が下記となった。</p>



<pre class="wp-block-code"><code>
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if &#091; $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if &#091; -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/opt/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/opt/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# &lt;&lt;&lt; conda initialize &lt;&lt;&lt;
</code></pre>



<p>デフォルトでanaconda設定が読み込まれ、プロンプトが変わってしまう。<br>ここは要注意。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>古いバージョンのWordPressでプラグインのバージョンアップ時にエラー</title>
		<link>https://s-pro4.com/page-897.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Wed, 05 Feb 2025 17:09:04 +0000</pubDate>
				<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=897</guid>

					<description><![CDATA[古いWordPress環境をメンテナンスする。事情がありWordPress本体のバージョンアップはできない。 そこで、プラグインのバージョンアップを行ったところ、エラーとなった。 　↓ 更新失敗: ダウンロードに失敗しま [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>古いWordPress環境をメンテナンスする。事情がありWordPress本体のバージョンアップはできない。</p>



<p>そこで、プラグインのバージョンアップを行ったところ、エラーとなった。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="148" src="https://s-pro4.com/wp-content/uploads/2025/02/certificate1-1024x148.jpg" alt="" class="wp-image-898" srcset="https://s-pro4.com/wp-content/uploads/2025/02/certificate1-1024x148.jpg 1024w, https://s-pro4.com/wp-content/uploads/2025/02/certificate1-300x43.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/02/certificate1-768x111.jpg 768w, https://s-pro4.com/wp-content/uploads/2025/02/certificate1.jpg 1061w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>　↓</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="149" src="https://s-pro4.com/wp-content/uploads/2025/02/certificate2-1024x149.jpg" alt="" class="wp-image-899" srcset="https://s-pro4.com/wp-content/uploads/2025/02/certificate2-1024x149.jpg 1024w, https://s-pro4.com/wp-content/uploads/2025/02/certificate2-300x44.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/02/certificate2-768x112.jpg 768w, https://s-pro4.com/wp-content/uploads/2025/02/certificate2.jpg 1065w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>更新失敗: ダウンロードに失敗しました。 <br>cURL error 60: SSL certificate problem: unable to get local issuer certificate</p>



<p>見ただけでは何が原因かわかりにくい。</p>



<p>わかりやすく解説してくださっている参考ページを発見</p>



<p>参考ページ）<br><a href="https://仙台ホームページ制作.jp/%EF%BC%88%E8%A7%A3%E6%B1%BA%E6%B8%88%E3%81%BF%EF%BC%89wordpress%E3%81%A7%E3%80%80curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate%E3%80%80%E3%81%8C%E8%A1%A8%E7%A4%BA/" target="_blank" rel="noreferrer noopener">https://仙台ホームページ制作.jp/%EF%BC%88%E8%A7%A3%E6%B1%BA%E6%B8%88%E3%81%BF%EF%BC%89wordpress%E3%81%A7%E3%80%80curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate%E3%80%80%E3%81%8C%E8%A1%A8%E7%A4%BA/</a></p>



<p>WordPressに含まれている .crtファイルの有効期限が切れているようで、.crtファイルを差し替えればよいとのこと。</p>



<p>(1)下記から有効期限が切れていない ca-bundle.crt をダウンロードする。<br><a href="https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/certificates/ca-bundle.crt" target="_blank" rel="noreferrer noopener">https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/certificates/ca-bundle.crt</a></p>



<p>(2)wp-includes/certificates/ca-bundle.crt を差し替える。</p>



<p>これで、再度pluginのバージョンアップを行うと、無事に更新成功。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="147" src="https://s-pro4.com/wp-content/uploads/2025/02/certificate3-1024x147.jpg" alt="" class="wp-image-900" srcset="https://s-pro4.com/wp-content/uploads/2025/02/certificate3-1024x147.jpg 1024w, https://s-pro4.com/wp-content/uploads/2025/02/certificate3-300x43.jpg 300w, https://s-pro4.com/wp-content/uploads/2025/02/certificate3-768x110.jpg 768w, https://s-pro4.com/wp-content/uploads/2025/02/certificate3.jpg 1062w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>そもそもは、WordPress本体のバージョンアップができるならば出会わなかった問題であろう。セキュリティリスクを理解したうえで運用しないと。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Securimageの3.Xから4.Xへのバージョンアップを試みる</title>
		<link>https://s-pro4.com/page-866.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Mon, 09 Dec 2024 16:28:19 +0000</pubDate>
				<category><![CDATA[php]]></category>
		<category><![CDATA[web技術]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=866</guid>

					<description><![CDATA[Securimage 3.2RC3を使用していて、現在の最新版4.0.2へアップグレードを試験してみた。 https://github.com/dapphp/securimage というのは、PHPのバージョンを7.4か [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Securimage 3.2RC3を使用していて、現在の最新版4.0.2へアップグレードを試験してみた。</p>



<p><a href="https://github.com/dapphp/securimage" target="_blank" rel="noreferrer noopener">https://github.com/dapphp/securimage</a><br></p>



<p>というのは、PHPのバージョンを7.4から8.Xへ上げるためである。</p>



<p>サンプルのexample_form.phpを見ると、HTML出力用の getCaptchaHtml というstatic functionができて、簡単に使うにはそれだけ記述すれば良さそうだ。</p>



<p>4.0.2での記述</p>



<pre class="wp-block-code"><code>      echo "&lt;div id='captcha_container_1'>\n";
      echo Securimage::getCaptchaHtml($options);
      echo "\n&lt;/div>\n";
</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="328" height="150" src="https://s-pro4.com/wp-content/uploads/2024/12/securimage.jpg" alt="" class="wp-image-867" srcset="https://s-pro4.com/wp-content/uploads/2024/12/securimage.jpg 328w, https://s-pro4.com/wp-content/uploads/2024/12/securimage-300x137.jpg 300w" sizes="(max-width: 328px) 100vw, 328px" /></figure>



<p>この記述だけで、文字列、再生ボタン、再表示ボタン、文字入力テキストフィールドが生成される。<br>展開されたHTMLの中身は下記のような感じ</p>



<pre class="wp-block-code"><code>
&lt;div id='captcha_container_1'>
&lt;img style="float: left; padding-right: 5px" id="captcha_image" src="/securimage/securimage_show.php?id=5a8bbfe3b4c78c615754356f335fdea831d7f97c&amp;amp;amp;" alt="CAPTCHA Image" />&lt;div id="captcha_image_audio_div">
&lt;audio id="captcha_image_audio" preload="none" style="display: none">
&lt;source id="captcha_image_source_wav" src="/securimage/securimage_play.php?id=5a8bbfe3b4c78c615754356f335fdea831d7f97c" type="audio/wav">
&lt;/audio>
&lt;/div>
&lt;div id="captcha_image_audio_controls">
&lt;a tabindex="-1" class="captcha_play_button" href="/securimage/securimage_play.php?id=5a8bbfe3b4c78c615754356f335fdea831d7f97c" onclick="return false">
&lt;img class="captcha_play_image" height="32" width="32" src="/securimage/images/audio_icon.png" alt="Play CAPTCHA Audio" style="border: 0px">
&lt;img class="captcha_loading_image rotating" height="32" width="32" src="/securimage/images/loading.png" alt="Loading audio" style="display: none">
&lt;/a>
&lt;noscript>Enable Javascript for audio controls&lt;/noscript>
&lt;/div>
&lt;script type="text/javascript" src="/securimage/securimage.js">&lt;/script>
&lt;script type="text/javascript">captcha_image_audioObj = new SecurimageAudio({ audioElement: 'captcha_image_audio', controlsElement: 'captcha_image_audio_controls' });&lt;/script>
&lt;a tabindex="-1" style="border: 0" href="#" title="Refresh Image" onclick="securimageRefreshCaptcha('captcha_image', 'captcha_image_audioObj'); this.blur(); return false">&lt;img height="32" width="32" src="/securimage/images/refresh.png" alt="Refresh Image" onclick="this.blur()" style="border: 0px; vertical-align: bottom">&lt;/a>&lt;br />&lt;div style="clear: both">&lt;/div>&lt;label for="captcha_code">Type the text:&lt;/label> &lt;input type="text" name="captcha_code" id="captcha_code" autocomplete="off" required="1" >&lt;input type="hidden" id="captcha_image_captcha_id" name="captcha_id" value="5a8bbfe3b4c78c615754356f335fdea831d7f97c">
&lt;/div></code></pre>



<p>3.2RC3でのexample_form.php記述↓と比較してみると、</p>



<pre class="wp-block-code"><code>  &lt;p>
    &lt;img id="siimage" style="border: 1px solid #000; margin-right: 15px" src="./securimage_show.php?sid=&lt;?php echo md5(uniqid()) ?>" alt="CAPTCHA Image" align="left" />
    &lt;object type="application/x-shockwave-flash" data="./securimage_play.swf?bgcol=#ffffff&amp;amp;icon_file=./images/audio_icon.png&amp;amp;audio_file=./securimage_play.php" height="32" width="32">
    &lt;param name="movie" value="./securimage_play.swf?bgcol=#ffffff&amp;amp;icon_file=./images/audio_icon.png&amp;amp;audio_file=./securimage_play.php" />
    &lt;/object>
    &amp;nbsp;
    &lt;a tabindex="-1" style="border-style: none;" href="#" title="Refresh Image" onclick="document.getElementById('siimage').src = './securimage_show.php?sid=' + Math.random(); this.blur(); return false">&lt;img src="./images/refresh.png" alt="Reload Image" height="32" width="32" onclick="this.blur()" align="bottom" border="0" />&lt;/a>&lt;br />
    &lt;strong>Enter Code*:&lt;/strong>&lt;br />
     &lt;?php echo @$_SESSION&#091;'ctform']&#091;'captcha_error'] ?>
    &lt;input type="text" name="ct_captcha" size="12" maxlength="8" />
  &lt;/p>
</code></pre>



<p>昔はフラッシュの利用を想定していたこと、音の再生と文字列変更がJavaScriptになったこと、securimage_show.phpのGETパラメータがsidからidになったことなどが異なる点か。</p>



<p>ということで、getCaptchaHtml が使えると楽なことはわかったが、デザイン的にHTMLを手で書きたい、特に今回は既存フォームの移行であり、getCaptchaHtmlを使わずにどうするかを考えた。<br>基本的には展開後のHTMLに相当するものを出せば良いわけだ。</p>



<p>PHP＋HTML記述例）</p>



<pre class="wp-block-code"><code>&lt;?php
	$set_captcha_id = md5(uniqid());
?>
&lt;img id="captcha_image" src="./securimage_render.php?id=&lt;?php echo $set_captcha_id; ?>" alt="CAPTCHA Image">

&lt;div id="captcha_image_audio_div">
&lt;audio id="captcha_image_audio" preload="none" style="display: none">
&lt;source id="captcha_image_source_wav" src="/securimage/securimage_play.php?id=&lt;?php echo $set_captcha_id; ?>" type="audio/wav">
&lt;/audio>
&lt;/div>

&lt;div id="captcha_image_audio_controls">
&lt;a class="captcha_play_button" href="/securimage/securimage_play.php?id=&lt;?php echo $set_captcha_id; ?>" onclick="return false">
【音を聞く】]&lt;/a>
&lt;/div>

&lt;script type="text/javascript" src="/securimage/securimage.js">&lt;/script>
&lt;script type="text/javascript">captcha_image_audioObj = new SecurimageAudio({ audioElement: 'captcha_image_audio', controlsElement: 'captcha_image_audio_controls' });&lt;/script>

&lt;div>
&lt;a href="#" onclick="securimageRefreshCaptcha('captcha_image', 'captcha_image_audioObj'); this.blur(); return false" class="link">【画像を変更】&lt;/a>
&lt;/div>

&lt;input type="text" name="captcha_code">
&lt;input type="hidden" name="captcha_id" id="captcha_image_captcha_id" value="&lt;?php echo $set_captcha_id; ?>"></code></pre>



<p>音声再生ボタンと、画像変更ボタンはテキストを想定した。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="274" height="173" src="https://s-pro4.com/wp-content/uploads/2024/12/securimage2.jpg" alt="" class="wp-image-868"/></figure>



<p>なお、PHP 8.3.10で試験をしたところ、Deprecated: が出た。</p>



<p>Deprecated: Creation of dynamic property Securimage::$code_entered is deprecated in &lt;path>/securimage/securimage.php on line 1028</p>



<p>Deprecated: Creation of dynamic property Securimage::$correct_code is deprecated in &lt;path>/securimage/securimage.php on line 1029</p>



<p>未定義プロパティへの代入として怒られた。<br>securimage.phpの適切な位置に宣言を入れておくことにした。</p>



<pre class="wp-block-code"><code>    private $code_entered;
    private $correct_code;</code></pre>



<p></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
