ゆう's Blog
サーバの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.";
}
?>

PHPでファイルを作成、編集、削除する基本的なコード

ファイルの作成:

<?php
$file = 'example.txt';
$content = 'Hello, World!';

// ファイルを開く(存在しない場合は新規作成)
$handle = fopen($file, 'w');

if ($handle) {
// ファイルに書き込む
fwrite($handle, $content);
// ファイルを閉じる
fclose($handle);
echo "File '$file' has been created.";
} else {
echo "Unable to create the file '$file'.";
}
?>

ファイルの編集:

<?php
$file = 'example.txt';
$content = ' This is additional content.';

// ファイルを開く(追記モード)
$handle = fopen($file, 'a');

if ($handle) {
// ファイルに書き込む
fwrite($handle, $content);
// ファイルを閉じる
fclose($handle);
echo "File '$file' has been updated.";
} else {
echo "Unable to update the file '$file'.";
}
?>

ファイルの削除:

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

// ファイルを削除
if (unlink($file)) {
echo "File '$file' has been deleted.";
} else {
echo "Unable to delete the file '$file'.";
}
?>

ファイルとディレクトリのパーミッションの違い

ディレクトリのパーミッション
R: ディレクトリ内のファイルが表示されるか(lsで表示されるか)
W: ディレクトリ内のファイルを新規作成, 消去できるか(存在するファイルの読み書きは可能)
X: ディレクトリ内に入れるか(cdできるか)

ファイルのパーミッション
R: ファイルを読み込むことができる。
W: ファイルを上書きできる。
X: ファイルを実行できる。

transformの4つの値

移動(translate)
縮尺(scale)
回転(rotate)
傾斜(skew)

/* transformの複数指定の方法 */
transform: scale(0.5, 0.5) rotate(-45deg) translate(-256px,500px);

これ、svgに使えて便利。

/* 左右に反転 */
transform: scale(-1, 1);
/* 上下に反転 */
transform: scale(1, -1);

無限スクロール

// コンテンツを取得する関数
function fetchContent() {
// ここでサーバーから新たなコンテンツを非同期で取得します。
// この例では、具体的な取得方法は省略しています。
}

// スクロールイベントのリスナーを設定
window.onscroll = function() {
// ユーザーがページの一番下までスクロールしたかどうかをチェック
if (window.innerHeight + window.scrollY >= document.body.offsetHeight) {
// ページの一番下までスクロールしたら、新たなコンテンツを取得
fetchContent();
}
};

特定のカラムの値を一次元配列として取得

$sql = "SELECT name FROM doraemon_users";
$sth = $pdo -> query($sql);
$aryList = $sth -> fetchAll(PDO::FETCH_COLUMN);
print_r($aryList);

テンプレートリテラル

JavaScriptのinnerHTMLプロパティは、改行を含む文字列を正しく解釈できません。しかし、代わりにテンプレートリテラルを使用することで、複数行の文字列を作成することができます。テンプレートリテラルはバッククォート(`)で囲まれた文字列で、改行や式の埋め込みが可能です。

target.innerHTML = `
<?php
echo '<select name="cat_select">';
foreach($select_data as $key => $value) {
echo '<option value="'.$key.'">'.$value[0].' ('.$value[1].')</option>';
}
echo '</select>';
?>
`;