ゆう's Blog
file_put_contents 関数

file_put_contents 関数は、書き込みが成功した場合には書き込まれたバイト数を返し、失敗した場合には false を返します。

$result = file_put_contents('/path/to/directory/file.txt', 'Hello, World!');
if ($result === false) {
    echo 'ファイルの作成に失敗しました。';
} else {
    echo '書き込まれたバイト数: ' . $result;
}

PHPでMySQLデータをインポートする

<?php
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';
$backupFile = 'path_to_your_backup_file.sql';

// データベース接続
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// SQLファイルを読み込む
$sql = file_get_contents($backupFile);

// SQLクエリを実行
$conn->exec($sql);

echo "Import completed.";
?>

PHPでMySQLデータをエクスポートする

<?php
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';

// データベース接続
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// テーブル名を取得
$tables = $conn->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);

$backupFile = 'backup_' . date('Ymd_His') . '.sql';
$handle = fopen($backupFile, 'w');

foreach ($tables as $table) {
    // テーブルの作成文を取得
    $createTableStmt = $conn->query("SHOW CREATE TABLE $table")->fetch(PDO::FETCH_ASSOC);
    fwrite($handle, $createTableStmt['Create Table'] . ";\n\n");

    // テーブルのデータを取得
    $rows = $conn->query("SELECT * FROM $table")->fetchAll(PDO::FETCH_ASSOC);
    foreach ($rows as $row) {
        $values = array_map([$conn, 'quote'], array_values($row));
        fwrite($handle, "INSERT INTO $table VALUES (" . implode(', ', $values) . ");\n");
    }
    fwrite($handle, "\n\n");
}

fclose($handle);
echo "Backup completed: $backupFile";
?>

PHPでImagickを使用して画像をWebPに変換する

<?php
$image = new Imagick('input.jpg'); // 入力画像ファイル
$image->setImageFormat('webp'); // 出力形式をwebpに設定
$image->setImageCompressionQuality(80); // 画像の品質を設定(0-100の範囲、高いほど品質が良い)
$image->writeImage('output.webp'); // 出力ファイル名
?>

PHPでImagickとGDの利用可能性を判別する

if (extension_loaded('imagick')) {
    echo 'Imagickを使用します。';
} elseif (extension_loaded('gd')) {
    echo 'GDを使用します。';
} else {
    echo 'ImagickもGDも利用できません。';
}

php-fpmを使っている場合、実行ユーザは?

/etc/php-fpm.d/www.conf で設定されているuserとgroup。

例えば、
user = apache
group = apache

サーバのcronを使ってphpファイルを動作させると、phpの実行ユーザはcronの実行ユーザになりますか?それとも、通常のphpファイルの実行ユーザ(たとえば、apacheなど)になりますか?

サーバーのcronを使ってPHPファイルを実行する場合、そのPHPファイルの実行ユーザーはcronの実行ユーザーになります。つまり、cronジョブを設定したユーザー(例えば、rootや特定のシステムユーザーなど)の権限でPHPスクリプトが実行されます。

一方、Webサーバー(例えばApache)経由でPHPファイルを実行する場合、その実行ユーザーは通常、Webサーバーの実行ユーザー(例えば、www-dataやapacheなど)になります。

したがって、cronを使ってPHPを実行するときとWebサーバー経由でPHPを実行するときでは、実行ユーザーが異なる可能性があります。これはファイルの読み書き権限などに影響を与えるため、注意が必要です。

ディレクトリのパーミッションで、「r」がないと何ができないのか。

ディレクトリのパーミッションにおいて、「r」は「読み取り」を意味します。したがって、ディレクトリのパーミッションで「r」がない場合、そのディレクトリの内容を読み取ることができません。具体的には、ディレクトリ内のファイルやサブディレクトリの名前をリストすることができなくなります。

例えば、`ls` コマンドを使用してディレクトリの内容を表示しようとすると、「Permission denied」(許可が拒否されました)というエラーメッセージが表示されます。また、そのディレクトリ内のファイルを開くこともできません。

ただし、ディレクトリ自体に対する「実行」(x)パーミッションがある場合、そのディレクトリ内の特定のファイルにアクセスすることは可能です(そのファイルのパーミッションがそれを許可している場合)。しかし、「読み取り」(r)パーミッションがないため、どのファイルが存在するのかを知る方法はありません。

PHPでファイルを作成、編集、削除するために必要な実行ユーザのパーミッション

PHPでファイルを作成、編集、削除したいなら。
ディレクトリに「w」と「x」。ファイルに「w」が必要。

PHPでファイルを編集できればいいのなら。
ディレクトリに「x」。ファイルに「w」が必要。

なお、ファイルに「r」がないと、file_get_contentsで読み込めない。(ディレクトリに「x」は必要)

ファイルのパーミッションを確認

読み取り権限(R)の確認:

<?php
$file = 'example.txt';

if (is_readable($file)) {
echo "The file '$file' is readable.";
} else {
echo "The file '$file' is not readable.";
}
?>

書き込み権限(W)の確認:

<?php
$file = 'example.txt';

if (is_writable($file)) {
echo "The file '$file' is writable.";
} else {
echo "The file '$file' is not writable.";
}
?>

実行権限(X)の確認:

<?php
$file = 'example.txt';

if (is_executable($file)) {
echo "The file '$file' is executable.";
} else {
echo "The file '$file' is not executable.";
}
?>