カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

XAMPPでMySQLが起動しないエラー

XAMPPを使って開発をしていると、たまにMySQLがエラーで起動できなくなることがあります。
これまで同じ現象を2台のPCで経験しましたので、今後のためにも色々調べてみた中からなるべく簡単に戻せる方法をご紹介します。

まずはXAMPPでMySQLをスタートさせようとするとこのようなエラーが発生します。

エラー内容

Error: MySQL shutdown unexpectedly.
This may be due to a blocked port, missing dependencies, 
improper privileges, a crash, or a shutdown by another method.
Press the Logs button to view error logs and check
the Windows Event Viewer for more clues
If you need more help, copy and post this
entire log window on the forums

翻訳すると…

エラーです。MySQLが予期せずシャットダウンしました。
これは、ブロックされたポート、欠落した依存関係、不適切な特権、クラッシュ、または他の方法によるシャットダウンが原因である可能性があります。
不適切な特権、クラッシュ、または他の方法によるシャットダウンが原因である可能性があります。
Logs ボタンを押してエラーログを表示し、Windows Event Viewer をチェックしてください。
Windowsイベント・ビューアーを確認してください。
さらに詳しい情報が必要な場合は、以下のログウィンドウをコピーしてフォーラムに投稿してください。
ログウィンドウ全体をコピーしてフォーラムに投稿してください。

別のサービスが同ポートを使用しているか、ファイルが破損していることが原因のようです。
私の場合は同ポートを使っているサービスはなかったので、データの復元を試みたところ解決しました。


xampp\mysql\dataフォルダーを一旦別の場所にコピーしておきます。
コピー出来たらxampp\mysql\dataの中身を全て削除します。

続きを読む…»

13,429 views

Windows XAMPPのPHPバージョン切り替え

WindowsでXAMPPを使ってPHPの開発をしているとPHPの特定のバージョンで動作検証がしたい!ということがあると思います。
そんな時に手軽にPHPのバージョンを切り替えできる方法があったのでご紹介します。

※XAMPPはC:\xamppにインストールされている条件での説明となります。

まずはSourceForgeにて公開されているXAMPPの過去のバージョンをダウンロードします。
https://sourceforge.net/projects/xampp/files/XAMPP%20Windows/

XAMPPのバージョン=PHPのバージョンなので、検証したいバージョンのXAMPPのZIP形式をダウンロードします。
ここでは例として7.4.19をダウンロードしたと仮定します。
ダウンロードしたら解凍しましょう。

前準備としてC:\xamppにある「php」フォルダーをリネームします。
PHPのバージョンに合わせてリネームしましょう。
PHPバージョンが8.0.6であれば「php」を「php8.0.6」にリネームします。
次にC:\xampp\apache\conf\extraにある「httpd-xampp.conf」を「httpd-xampp.conf.8.0.6」にリネームします。
これで前準備は完了です。

次にダウンロードして解凍したxamppフォルダーにある「php」フォルダーを「php7.4.19」にリネームし、C:\xampp内に入れます。
そしてapache\conf\extraにある「httpd-xampp.conf」を「httpd-xampp.conf.7.4.19」にリネームし、C:\xampp\apache\conf\extra内に入れます。

コマンドプロンプトを管理者として実行します。
C:\xamppに移動し次のコマンドを実行します。

mklink /D php php7.4.19

C:\xampp\apache\conf\extraに移動し次のコマンドを実行します。

mklink httpd-xampp.conf httpd-xampp.conf.7.4.19

こうすることでバージョンが付加されたフォルダーであってもシンボリックリンクでアクセスすることが出来るようになります。
別のバージョンに切り替えたいときはシンボリックリンクを作り直せばいいということになります。

4,491 views

クラウド型スケジューラーパッケージ

現在はパッケージ版の販売を終了しています。
サブスク版にてご提供していますので、そちらをご覧ください。
https://seion.biz/app/kuranosuke/


シンプルで使いやすいWEBで使えるスケジューラーをパッケージ化し、ココナラで販売中です。
シンプルながら有給休暇の管理(申請から管理者の承認まで)もできます!

従業員が今、社内にいるのか、外出中なのか、現在の状況が一目でわかります。
週間の予定表示もあり、全体の予定把握も簡単です。月間表示も可能!

詳細は下記からご覧ください。

クラウド型スケジューラーパッケージを提供します 従業員の予定を一元管理!有給休暇の管理もできる

820 views

ファイルを添付してメール送信3

PHPのmb_send_mail関数でファイルを添付してメールを送信するスクリプト

$to   = "mailto@example.jp";
$from = "mailfrom@example.jp";

$subject  = "件名";

$mailbody = "メール本文\n";

$boundary = md5(uniqid(rand())); //バウンダリー文字(パートの境界)


$header = "From: $to\n"
        . "Reply-To: $from\n"
        . "X-Mailer: PHP/".phpversion()."\n"
        . "MIME-version: 1.0\n"
        . "Content-Type: multipart/mixed;\n"
        . "\tboundary=\"$boundary\"\n";

$msg = "This is a multi-part message in MIME format.\n\n"
     . "--$boundary\n"
     . "Content-Type: text/plain; charset=iso-2022-jp\n"
     . "Content-Transfer-Encoding: 7bit\n\n"

     . $mailbody."\n"

     . "\n";


// 画像(upfileという名前でアップロードされたとする)
if($_FILES["upfile"]["error"] == UPLOAD_ERR_OK) {

    $tmp   = $_FILES["upfile"]["tmp_name"];
    $name  = $_FILES["upfile"]["name"];
    $size  = $_FILES["upfile"]["size"];

    $array = explode(".", $name);
    $nr    = @count($array);
    $ext   = $array[$nr - 1];

    $name  = date("U").".".$ext;

    $fp = fopen($tmp, "r");
    $contents = fread($fp, filesize($tmp));
    fclose($fp);
    $f_encoded = chunk_split(base64_encode($contents)); //エンコード

    $msg .= "--$boundary\n"
         . "Content-Type: application/octet-stream;\n"
         . "\tname=\"$name\"\n"
         . "Content-Transfer-Encoding: base64\n"
         . "Content-Disposition: attachment;\n"
         . "\tfilename=\"$name\"\n\n"
         . "$f_encoded\n"
         . "\n";

} //[end if]


// language establish
mb_language("ja");

// original encoding
$orgEncoding = mb_internal_encoding();

// specify internal encoding
mb_internal_encoding("utf-8") ;


//メール送信
if(!mb_send_mail($mailto, $subject, $msg, $header)) {
    echo "メールの送信に失敗しました。";
}

// internal encoding take back
mb_internal_encoding($orgEncoding);
1,095 views

Geocoder APIを利用した座標変換

Geocoder APIを使えば住所から座標を取得することができます。
今回はJavaScriptではなくHTTPリクエストで座標を取得する方法をご紹介します。

取得するデータはJSON形式で受け取るようにしています。
使用する言語はPHPです。

まずはリクエストするURLとAPIキーを宣言

$googleapis = "https://maps.googleapis.com/maps/api/geocode/json";
$api_key    = "YOUR API KEY";

続いてパラメーターを追加していきます。
検索する住所を追加

$googleapis .= "?address=" . $address;

国を指定(同じ名前の地名が中国等にあるとそちらの座標になってしまうことがあります)

$googleapis .= "&components=country:JP";

APIキーを設定します

$googleapis .= "&key=" . $api_key;

file_get_contents関数を使ってデータを取得します。

$data = file_get_contents($googleapis);

返ってきたJSONデータを解析して座標を取り出します。

$json = json_decode($data);

$lat = $json->results[0]->geometry->location->lat;
$lng = $json->results[0]->geometry->location->lng;

if( $json->status == "OK" ) {
    echo $lat . "," . $lng;
}

詳細な仕様は公式ドキュメントを参照ください。
https://developers.google.com/maps/documentation/geocoding/intro#GeocodingRequests

1,242 views