test.phpを以下の内容にして、アクセス。
<?php echo exec('which php'); ?>
デフォルトcharset(default_charset)がUTF-8に変わったのが原因の可能性大。
iframeで読み込んでる先が文字コード違うと対策がキツイ。
ページ数が少ないなら文字コードをコツコツ変換するほうが早いかもね。
PHP7.x以降なら
.user.ini作って
default_charset=none
を保存しとくと治ることもある。
正規表現のマッチパターンの文字が大きいとエラーになるようになってる。
pcre.jit=0をphp.iniに設定すれば解消される
メールアドレスのチェックで使っている場合、昔の携帯アドレスとか無視して良い環境なら
filter_var()で代用したほうがよいですよ。
<?php // バリデーションに使うメールアドレス $email = 'hogehoge@email.com'; if (filter_var($email, FILTER_VALIDATE_EMAIL)) { echo "正しい形式のメールアドレスです。"; } else { echo "不正な形式のメールアドレスです。"; }
ネタ元
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);
jcode.plが見つからなかったので派生版であるJcode.pmで乗り切った。
http://openlab.ring.gr.jp/Jcode/index-j.html
でもPerl 5.8.0よりEncodeとして標準装備されたそうなので、古いコードを動かさなきゃいけないという理由でもなければEncode使いましょう
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)なのでその設定方法。
・PCとPR-500MIをLANで直つなぎしてhttp://192.168.1.1へアクセス
・ログインする
・基本設定>接続先設定(IPv4 PPPoE)を選択
・一番上のメインセッションのとこの「編集」をクリック
・楽天から届いてる書類のIPv4(PPPoE)インターネット接続情報をそのまま打ち込む
・下の「設定」ボタンをクリックして完了
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
vbsファイルを出力して実行させるという荒業
rem メッセージ表示 echo msgbox “メッセージ本文”,vbInformation,”タイトル” > %TEMP%/msgbox.vbs & %TEMP%/msgbox.vbs rem ファイル削除 del /Q %TEMP%\msgbox.vbs pause
完全に切れてるならいいんだけど、
微妙にサーバーレスポンスがあったりするような、頑張ってリトライ処理が走りそうな状況になると
マウスがカクつくなど、全体的に重くなることがある。
思い切ってネット切ると軽くなる