WEBアプリケーション(スクリプト)作成・修理・トラブル解決相談

CANADOH

QR Code

Memo

Home > Documents > Memo

Memo

最新の 8 件

[情報技術] ウェブサイトごとにPHPバージョンを決める
以下の条件が揃っていれば、.htaccessに設定を記述するだけでウェブサイトごとにPHPバージョンを決められます。
  • ウェブサーバー:Apache2
  • FastCGI:導入済み
  • php-cgi:様々なバージョンが導入済み
  • ScriptAlias:/cgi-bin/ に指定されているPathが実在し、そのPathにphp7.4等の実行ファイル(CGI版PHP)がある。(*1)
  • .htaccess:使える
  • .htaccessでAddHandler:使える
  • .htaccessでAction:使える
.htaccessに記述するコードは2行です。
Action myphp /cgi-bin/php7.4
AddHandler myphp .php
  • myphp:任意の文字列。自分がわかりやすいように独自のものを決めます。
  • /cgi-bin/:Apacheで設定されているScriptAliasのURL-Pathです。
  • php7.4:数字でバージョンを指定しています。ディストリビューションによっては `php74` などとなっています。環境に合わせて変更してください。
  • .php:拡張子phpのファイルを紐つけています。拡張子htmlを追加で紐つけるなら `.php .html` と半角スペース区切りで指定します。
拡張子htmlを追加する件について、どこかの個人の記事で「さくらのレンタルサーバーだと↓のように設定したのに動かない」と書かれているのを見かけましたが、それはCGI版PHPを使っているからだと思います。下記のハンドラーはモジュール版PHP用です。
AddHandler application/x-httpd-php .html
*1 CGI版PHPとCLI版PHPは挙動が違います。必ずCGI版PHPを使います。CLI版を使った場合は、「End of script output before headers」という具合のエラーが出るでしょう。
2026-01-28 (Wed) by Canaid SK
[情報技術] メールフォームからのメールがGmailに届かない
「ウェブサイトのメールフォームから送られるメールが、Gmailにだけ届かない」という場合、Gmail以外にメールを送り、ヘッダーを確認してください。着目点は
Return-Path: ***
の「***」部分です。「***」はメールアドレスになっていると思いますが、恐らくそのアドレスのホスト名とSPFに記載のIPアドレスが不一致です。SPFが設定されていない場合は、もとより一致するはずがありません。
PHPのmail()関数を使ってメールを送る場合は、5番目の引数であるadditional_paramsにSenderアドレスを設定してください。`-f` オプションを使います。
例えば次のようにします。
mail({送信先}, {題名}, {本文}, "From: {送信元}", "-f{送信元}");
{送信元}のホスト名は、メールフォームが設置されているウェブサイトのドメインと同じである、または同じIPを引いていることが前提です。
正しく設定できていれば、メールフォームから送られてきたメールのヘッダーに
Return-Path: {送信元}
という情報があるはずです。
2026-01-28 (Wed) by Canaid SK
[情報技術] vimで使われている画面描写ライブラリ「ncurses」
vimがCUIでどうやって画面を作っているのかが気になったのでソースコードを読んだところ、画面描写のところで「ncurses」が見つかりました。ncursesはC言語で作られたライブラリで、ターミナルに依存しないテキスト・ユーザー・インターフェース作成用APIのライブラリだそうです。
試しにncursesを使って画面描画をしてみました。
"ncurses.c" という名前のファイルを作り、そこにCのコードを書いていきました。書いたら保存して、手頃なCコンパイラ(わたしはgcc)でコンパイルして、できた実行ファイルを実行して確認です。コンパイル時に「関数が定義されていない」とエラーが出る場合は、オプション "-l" でライブラリをリンカーに渡してみてください。
/**
 * COMPILE Example
 * $ gcc ncurses.c -o ncurses -lncurses
 */

#include <ncurses.h>
#include <stdlib.h>

int main() {
    // ncursesの初期化
    initscr(); // 画面の初期化
    start_color(); // カラーのサポートを開始

    // カラーの初期化
    init_pair(1, COLOR_RED, COLOR_BLACK); // 赤色の色ペアを定義

    // カーソルを非表示に
    curs_set(0);

    // カーソルを特定の位置に移動
    mvprintw(10, 10, "Hello, Terminal using ncurses!");

    // 色を適用
    attron(COLOR_PAIR(1)); // 色ペアを使用
    mvprintw(12, 10, "This text is red!");
    attroff(COLOR_PAIR(1)); // 色ペアの適用を解除

    // 更新を行う
    refresh();

    // キー入力を待つ
    getch();

    // ncursesの終了
    endwin();

    return 0;
}
2026-01-10 (Sat) by Canaid SK
[情報技術] Linuxでディレクトリ内のファイル総容量を確認する
Linuxでディレクトリ内のファイル層容量を知るには `du` コマンドを使います。
$ du -sh {ディレクトリのPath}
  • -s:総容量のみ表示
  • -h:人間の読みやすい表示
わたしのtestディレクトリで試した結果は、
$ du -sh test
593M    test
2026-01-09 (Fri) by Canaid SK
[情報技術] 無線LANのUSB子機がなぜか使えない問題
無線LANのUSB子機をつけてネットワークの状態を見たとします。
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> ...
2: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN mode DORMANT group default qlen 1000
DOWNしているのでUPします。
$ ip link set wlan0 up
RTNETLINK answers: Operation not permitted
操作が許可されていないと出ました。管理者権限で再試行します。
$ sudo ip link set wlan0 up
RTNETLINK answers: Operation not possible due to RF-kill
RF-killのせいで不可能だそうです。ブロックされているのかを調べます。
$ rfkill
ID TYPE      DEVICE     SOFT      HARD
 0 bluetooth hci0    blocked unblocked
 1 wlan      phy0    blocked unblocked
ソフトブロックされていますので、解除します。
$ rfkill unblock 1
USB子機のインジケーターが点滅を始めました。無線LANに繋がりました。
2025-12-29 (Mon) by Canaid SK
[情報技術] ASUS X205TAにArchLinuxをインストール
ASUS X205TAにDebian12ベースのRaspberryPI OS Desktopを入れることができた話を以前しました。今回はArchLinuxを入れてみました。
なぜArchかというと、本機でブートできるディストリビューションがそもそも上述の2つしかなかったからです。あれこれ試したのですが。
Archは最初に手動インストールを試みたところ、ブートローダーのGRUBがどうしても読み込まれず、やむなく「archinstall」を使いました。
結論を言いますと、自動インストールだろうがGRUBを起動することはできませんでした。そしてArchで初期選択されていたsystemd-bootは起動できました。ただ、移動キーが利かないので、ブートローダー画面でOSを起動する以外を選択できません。
用途をDesktopにし、デスクトップ環境をXfceにしました。すると、PI OS Desktopで起きていた問題のほとんどが、Archでは発生しませんでした。スリープモードにしたあとタッチパッドのドライバがエラーを吐くのは同じでしたが。
ArchLinuxであればX205TAはかなり快適に使えますね。
2025-12-29 (Mon) by Canaid SK
[情報技術] MySQLでユーザーの権限を管理する
MySQLでユーザーを作る最基本コマンド
CREATE USER '{ユーザーアカウント}' IDENTIFY BY '{パスワード}'
ユーザーに権限を与える。
GRANT CREATE ON *.* TO `{ユーザーアカウント}`; -- データベースもテーブルも作れるようにする。
GRANT CREATE, DROP ON *.* TO `{ユーザーアカウント}`; -- どのデータベースもテーブルも作れて消せるようにする。
GRANT CREATE ON `hoge`.* TO `{ユーザーアカウント}`; -- hogeというデータベースや、hogeのテーブルを作れるようにする。
GRANT INSERT ON `hoge_%`.* TO `{ユーザーアカウント}`; -- 「hoge_{任意の文字列}」という形式のデータベースのテーブルに値を追加できるようにする。
ユーザーの権限を確認する。
SHOW GRANTS FOR `{ユーザーアカウント}`;
2025-12-05 (Fri) by Canaid SK
[情報技術] Apache2のエラー「.htaccess: Option Indexes not allowed here」解消
Apache2で「Internal Server Error」が出たときに、エラーログを見ますよね。そのログに「/***/.htaccess: Option Indexes not allowed here.」と書かれていたら、Apache2のConfigureファイルを変更することで解消できます。
例えば、表示したいウェブサイトの場所がユーザーディレクトリならば、`/etc/apache2/mods-avairable/userdir.conf` を管理者権限で開き、変更しましょう。変更する場所は、ここです。
AllowOverride    ...
.htaccessファイルで上書きをして良い項目が設定されているかと思います。もしも存在しなければ、その行を追加してください。書き方は次の通りです。
AllowOverride    ... Options=Indexes
`Options=Indexes` を追加する形です。このOptionsに複数指定する場合は、カンマで区切ればOKです。
設定をし終わったら、Apache2を再起動してください。
2025-11-28 (Fri) by Canaid SK

過去ログを見る