ゆう's Blog
/usr/local/bin と /usr/local/lib の違い

/usr/local/bin — 実行可能ファイル(コマンド)を置く場所
→ PATH に入るので、ユーザーが直接実行する。

/usr/local/lib — 実行ファイルが使うライブラリや内部ファイルを置く場所
→ 直接実行はしない。bin の裏側で使われる。

どちらも OS に上書きされない「ローカル専用領域」です。

/usr/bin や /usr/lib は OS やパッケージ管理(yum/dnf)が管理
/usr/local/bin と /usr/local/lib は 管理者(root)が手動で管理する領域

セキュリティと所有権の違い
/usr/local/bin の実行ファイルは root:root + 755 が必須
→ cloud-user 所有は危険(任意コード実行リスク)
/usr/local/lib のファイルも root:root が基本
→ ライブラリをユーザーが書き換えられると、bin の実行結果が乗っ取られる

Brevo API送信の実装方法

Composer で SDK をインストール
(Composer を実行したディレクトリに vendor/ が作られます。/usr/local/lib などで実行する。)

composer require getbrevo/brevo-php composer require guzzlehttp/guzzle

APIキーを取得
(authorized IP address も登録する)

PHPコード(公式クイックスタートに基づく構文)

<?php require_once '/usr/local/lib/vendor/autoload.php'; use Brevo\Brevo; use Brevo\TransactionalEmails\Requests\SendTransacEmailRequest; use Brevo\TransactionalEmails\Types\SendTransacEmailRequestSender; use Brevo\TransactionalEmails\Types\SendTransacEmailRequestToItem; // APIクライアント初期化 $client = new Brevo(apiKey: 'YOUR_BREVO_API_KEY'); // メール送信 $result = $client->transactionalEmails->sendTransacEmail( new SendTransacEmailRequest([ 'subject' => 'Hello from Brevo API!', 'htmlContent' => '<html><body><p>Hello!</p><p>This is a test email via Brevo API.</p></body></html>', 'sender' => new SendTransacEmailRequestSender([ 'name' => 'Your Name', 'email' => '[email protected]', ]), 'to' => [ new SendTransacEmailRequestToItem([ 'email' => '[email protected]', 'name' => 'John Doe', ]), ], ]) ); echo 'Email sent. Message ID: ' . $result->messageId . PHP_EOL;

APIキーをハードコーディングすることは避けてください。環境変数を使用してください。

Brevoで利用可能なSMTPポート

ポート587
ポート587は、現代のウェブでSMTP経由でメールを送信する際に使用される主要なポートです。送信に使用できる代替ポートもありますが、デフォルトとしてポート587から始めることをお勧めします。

ホスティングプロバイダによってポート587がブロックされている場合など、必要な場合にのみ別のポートの使用を検討してください。

ポート2525
ポート2525は、IETFやIANAによって公式に認められたSMTPポートではありません。しかしながら、SMTP送信においてポート587の代替として広く利用されており、ほとんどのISPやクラウドホスティングプロバイダーでサポートされています。

ポート587がブロックされている場合、ポート2525は有効な代替オプションとして機能します。

ポート465
ポート465は当初SMTPS(SSL経由のSMTP)用に指定されていましたが、その後廃止され、別の用途に転用されました。しかし、廃止されたにもかかわらず、多くのISPやクラウドホスティングプロバイダーは、SMTP送信のためにポート465を引き続きサポートしています。

SSL暗号化を使用して暗号化された接続を作成したい場合、このポートは有効な代替オプションとして機能します。

Brevo

「SMTP & API」は、右上の設定マークから。

APIキーはどこで確認できますか?

APIキーを保護し、セキュリティを強化するため、既存のAPIキーはBrevoアカウントからは表示されません。APIキーとMCPページにはキーの末尾の数字のみが表示されるため、必要に応じて複数のキーを区別することができます。

そのため、APIキーを作成する際は、安全な場所に保管することを強くお勧めします。APIキーを紛失した場合は、新しいAPIキーを作成し、安全な場所に保管してから、以前のキーと交換してください。

Composer をインストール

curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

「-- はオプションの終わりを示し、それ以降はファイル名や引数として扱われる」
「-- は『これ以降の入力はオプションではありません』という意味」

php --
→ PHP に「ここでオプション解析を終わりにして、後ろはスクリプトの引数として扱え」と指示

--install-dir=/usr/local/bin --filename=composer
→ これらは Composer インストーラに渡す引数 (PHP のオプションではない)

確認

# composer --version Do not run Composer as root/super user! See https://getcomposer.org/root for details Continue as root/super user [yes]? ⏎エンター Composer version 2.9.7 2026-04-14 13:31:52 PHP version 8.3.29 (/usr/bin/php) Run the "diagnose" command to get more detailed diagnostics output.

Composer 本体のアップデート方法

composer self-update

composer update は プロジェクト内のライブラリを更新するコマンド であり、 Composer 本体の更新とは別です。

Composer 本体 → composer self-update
プロジェクトの依存パッケージ → composer update(慎重に扱う必要あり)

「レンタルVPS側のパケットフィルター」と「firewalld」

VPS側パケットフィルター → ホスト側での“外側の防御壁”
OSに届く前の通信を止める。OSが壊れていても効く。

firewalld → ゲストOS内部のファイアウォール
OSが受け取ったパケットに対して制御する。OSが動いていないと効かない。

PHP スクリプト内で PATH を上書きする

<?php putenv('PATH=/usr/local/bin:/usr/bin:/bin:/home/ユーザー名/bin'); exec('echo $PATH', $out); var_dump($out);

PHP の exec() を使う前に、環境変数 PATH をセットできます。
この方法は「その PHP プロセス内だけ」有効。

但し、絶対パス指定が最も安全で、PATH に依存するのは避けるべきです。

cwebp / gif2webp / webpmux

ffmpeg と同じく静的バイナリでも動く

レンタルサーバー(シンフリーサーバー)でFFmpegを利用する

1)SSH 接続をしてサーバーを確認

SSH 接続をする

$ ssh -p 10022 ユーザー名@サーバー(ホスト名)

PATH を確認

~]$ echo $PATH /usr/lib/courier-imap/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ユーザー名/.composer/vendor/bin:/home/ユーザー名/bin

/home/ユーザー名/bin が存在しなかったので、bin ディレクトリを作成しました。

~]$ mkdir bin

CPU アーキテクチャを確認

~]$ uname -m x86_64

結果の意味
uname -m の結果選ぶべきファイル
x86_64amd64
i686 / i386i686
aarch64arm64
armv7larmhf
armv6larmel(または armhf)

2)「ファイルを置くだけで実行できる(=インストール不要のスタンドアロン版)」FFmpeg をダウンロードし、解凍。
そして、その中の ffmpeg と ffprobe を /home/ユーザー名/bin へ移動。

~]$ cd /tmp tmp]$ curl -LO https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz tmp]$ tar xf ffmpeg-release-amd64-static.tar.xz tmp]$ mv ffmpeg-x.x.x-amd64-static/ffmpeg /home/ユーザー名/bin/ tmp]$ mv ffmpeg-x.x.x-amd64-static/ffprobe /home/ユーザー名/bin/

パーミッションは、bin ディレクトリ,ffmpeg と ffprobe すべて 755 になっています。

3)確認

]$ ffmpeg -version

※ シェルでは PATH に入るが、PHP(Apache / php-fpm)では PATH に入らないので、PHP exec() から ffmpeg を呼ぶときには、絶対パスで ffmpeg を呼ぶ。

$cmd = sprintf( '/home/ユーザー名/bin/ffmpeg -y -i %s -vf %s -vframes 1 %s 2>&1', escapeshellarg($input), escapeshellarg('crop=100:100'), escapeshellarg($temp) );

※ ちなみに、PHP が実際にどの PATH を使っているかは下記で確認できます。

<?php exec('echo $PATH', $out); var_dump($out);

但し、絶対パス指定が最も安全で、PATH に依存するのは避けるべきです。

/usr/bin と /usr/local/bin

OS が管理するもの → /usr/bin
自分が追加したもの → /usr/local/bin
root 使えない環境 → /home/username/bin