PHPバージョンアップで文字化けした時の対処方法

デフォルトcharset(default_charset)がUTF-8に変わったのが原因の可能性大。


iframeで読み込んでる先が文字コード違うと対策がキツイ。
ページ数が少ないなら文字コードをコツコツ変換するほうが早いかもね。

PHP7.x以降なら
.user.ini作って

  default_charset=none

を保存しとくと治ることもある。

PHPを7.2にバージョンアップしたら正規表現でマッチしない現象が出た

正規表現のマッチパターンの文字が大きいとエラーになるようになってる。

pcre.jit=0をphp.iniに設定すれば解消される

メールアドレスのチェックで使っている場合、昔の携帯アドレスとか無視して良い環境なら
filter_var()で代用したほうがよいですよ。

<?php

// バリデーションに使うメールアドレス
$email = 'hogehoge@email.com';

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "正しい形式のメールアドレスです。";
} else {
echo "不正な形式のメールアドレスです。";
}

PHP file_get_contentsで、リモートホストから取得出来ない場合の代替関数サンプル POSTもあるよ

ネタ元

file_get_contents()が
使えないサーバーがあるんですよー

function curl_get_contents($url){
	$ch = curl_init($url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	$response = curl_exec($ch);
	curl_close($ch);
	return $response;
}

POST送る場合はこちらを参考に。

$POST_DATA = array(
    'foo' => 'bar'
);
$curl=curl_init("URL");
curl_setopt($curl,CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($POST_DATA));
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, FALSE);  // オレオレ証明書対策
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, FALSE);  // 
curl_setopt($curl,CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl,CURLOPT_COOKIEJAR,      'cookie');
curl_setopt($curl,CURLOPT_COOKIEFILE,     'tmp');
curl_setopt($curl,CURLOPT_FOLLOWLOCATION, TRUE); // Locationヘッダを追跡

$output= curl_exec($curl);

ネタ元

qiita.com

WADAXへの引っ越しでCGI動かなくて困ったときに調べた情報

cgi-binフォルダ以外で動かすには.htaccessを置いて以下のように記述

# CGI を使えるようにする。
Options +ExecCGI
AddHandler cgi-script .cgi .pl .pm

.htaccessのパーミッションは606
cgiファイルのパーミッションは701か705
cgiあるフォルダも701か705じゃないとダメらしい。

サーバーの違いでインストールされてるライブラリがたりないということもある

今回、Jcodeがなかったので以下からとってきて入れたら動いた
http://openlab.ring.gr.jp/Jcode/index-j.html

動かない、謎!と思ったら、
cgiコードをエラーがでなくなるまでどんどんコメントアウトしてどこが原因か当てをつけてから工夫しましょう。

ちなみにcgiのフルパスが欲しいときは以下のコードで実行

print "Content-type: text/html \n\n";
use Cwd;
my $cwd = Cwd::getcwd();
print $cwd;

楽天ひかりへの切り替え設定(PR-500MI)

我が家は標準タイプホームゲートウェイ/ひかり電話ルータ (PR-500MI)なのでその設定方法。

・PCとPR-500MIをLANで直つなぎしてhttp://192.168.1.1へアクセス
・ログインする
・基本設定>接続先設定(IPv4 PPPoE)を選択
・一番上のメインセッションのとこの「編集」をクリック
f:id:shikaku:20210301175741p:plain
・楽天から届いてる書類のIPv4(PPPoE)インターネット接続情報をそのまま打ち込む
f:id:shikaku:20210301180133p:plain
・下の「設定」ボタンをクリックして完了

C#/vb.netでパスが通っていない regasm.exe を呼出するexeを作る

ネタ元

x86でexe作れば32bit版の、
x64でexe作れば64bit版の、regasm呼び出せる

C#

using System.Runtime.InteropServices;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        // RegAsm のパスを取得
        string path = System.IO.Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "RegAsm.exe");
        // パスをコンソールに出力
        Console.WriteLine("[" + path + "]");

        System.Diagnostics.Process p = new System.Diagnostics.Process();
        p.StartInfo.FileName = path;
        // 渡されたコマンドライン引数をそのまま渡す
        StringBuilder buff = new StringBuilder(128);
        foreach(string arg in args)
        {
            buff.Append(arg + " ");
        }
        p.StartInfo.Arguments = buff.ToString();
        // 出力を取得できるようにする
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.RedirectStandardInput = false;
        // ウィンドウを表示しない
        p.StartInfo.CreateNoWindow = true;

        // 起動
        p.Start();

        // 出力を取得
        string results = p.StandardOutput.ReadToEnd();
        // プロセス終了まで待機する
        p.WaitForExit();
        p.Close();
        // 出力された結果を表示
        Console.WriteLine(results);
    }
}

vb.net

Imports System.Runtime.InteropServices
Imports System.Text

Module Program

    Sub Main()

        'RegAsm のパスを取得
        Dim path As String = IO.Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "RegAsm.exe")
        'パスをコンソールに出力
        Console.WriteLine("[" & path & "]")

        Dim p As New System.Diagnostics.Process()
        p.StartInfo.FileName = path
        '渡されたコマンドライン引数をそのまま渡す
        Dim args As New StringBuilder(128)
        For Each arg As String In My.Application.CommandLineArgs
            args.Append(arg & Space(1))
        Next
        p.StartInfo.Arguments = args.ToString
        '出力を取得できるようにする
        p.StartInfo.UseShellExecute = False
        p.StartInfo.RedirectStandardOutput = True
        p.StartInfo.RedirectStandardInput = False
        'ウィンドウを表示しない
        p.StartInfo.CreateNoWindow = True

        '起動
        p.Start()

        '出力を取得
        Dim results As String = p.StandardOutput.ReadToEnd()
        'プロセス終了まで待機する
        p.WaitForExit()
        p.Close()
        '出力された結果を表示
        Console.WriteLine(results)
    End Sub

End Module