スレッド:macOSで録音フォルダをsmb接続のフォルダにすると録音で
macOSで録音フォルダをsmb接続のフォルダにすると録音で 投稿者:sawa3 投稿日:2024/10/18(Fri) 07:11:04 No.1002
最近、macOSで利用を始めとところです。以下の点で数日録音できななくて苦労してしまったので、投稿しました。
macOSで録音フォルダをネットワーク共有フォルダ(SMB)内に指定していると、デイリー処理や予約録音が実行できない。
-->launchctlでログ記録するようにしたところ、ファイルの読み書き権限なく中断してしまっていると判明しました。
---ログ内容始まり---
Warning: file(録音フォルダ/kw/radiru_other.dat): failed to open stream: Operation not permitted in pathto/rfriends3/script/rf_common03.php on line 2
file not found 録音フォルダ/kw/radiru_other.dat or empty
---ログ内容終わり---
これは、システム整合性保護(SIP)によってファイルの読み書き権限が制限されているためです。
以前は、一部のシステム領域のみが保護されていたのですが、OSのバージョンが進むごとに領域が広がってきているようです。
因みにkw以下のdatファイルの読み込みで権限違反となっています。
不思議なことにphpのfile_get_contents()関数での読み込みはできています。
ですが、file()関数での読み込みは権限違反となっています。
なので、対応は、SIPを無効にするか、nonbom_file($fn)でのfile()の利用を諦めてfile_get_contents()で一旦文字列として取り込んでから1行ごとの配列にすることになるかと思います。個人的には、SIP無効は他のシステムへの影響ありまくりなので、申し訳ないのですがphpソースに手を入れることにしました。
以上です。
また、キーワードでの予約について疑問点がありますが、別投稿させていただきます。
Re: macOSで録音フォルダをsmb接続のフォルダ 投稿者:rfriends 投稿日:2024/10/18(Fri) 08:46:22 No.1005
MACではSAMBAのテストをしていません。
近いうちにテストをしてみたいと思います。
報告ありがとうございました。
Re: macOSで録音フォルダをsmb接続 投稿者:rfriends 投稿日:2024/10/18(Fri) 10:21:47 No.1008
以下で実装しようかと思います。(tabが無視されるので読みにくいと思いますが)

改行、空行の定義がむつかしいですね。

//
// file関数を使わない(macOS対策)2024/10/18
//
function rf_file($src,$ignore_new_lines,$skip_empty_lines)
{
// $rf_file_sw : =1 for mac, =0 normal
global $rf_file_sw;
//
// normal
if ($rf_file_sw == 0) {
$lines = file($src);
return $lines;
}
//
// 全体読み込み
$f = file_get_contents($src);
if ($f === false) {
return false;
}
//
// 改行で分離
$lines = explode("\n",$f);
if ($lines === false) {
return false;
}
//
// 各行をチェック
$lines2 = array();
foreach($lines as $line) {
//
// 改行を無視する
if ($ignore_new_lines == 1) {
$line = rtrim($line,"\n");
}
//
// 空行を無視する
if ($skip_empty_lines == 1) {
//
// 空行の解釈としてtrimで判断
if (trim($line) == "") {
continue;
}
}
$lines2[] = $line;
}
return $lines2;
}
Re^2: macOSで録音フォルダをsmb接続 投稿者:sawa3 投稿日:2024/10/18(Fri) 11:01:52 No.1009
ご対応ありがとうございます。
少し、この件と外れてしまいますが、予約が実行できなくて、原因を探している時に色々ソースコードを拝見して気付いたのですが、、、
function get_plist_dir_osx内に
$time = 10 * 60;
とあってその後に/$ret = rf_sch_check_osx($flm, $nw, $tim);となっていましたが、$timではなく、$timeではないでしょうか?
$timは関数の引数の記述はあっても変数定義としてはglobalにもなかったと思います。
Re^3: macOSで録音フォルダをsmb接続 投稿者:rfriends 投稿日:2024/10/18(Fri) 11:24:11 No.1010
、、
> function get_plist_dir_osx内に
> $time = 10 * 60;
> とあってその後に/$ret = rf_sch_check_osx($flm, $nw, $tim);となっていましたが、$timではなく、$timeではないでしょうか?

修正します。
Re^4: macOSで録音フォルダをsmb接続 投稿者:sawa3 投稿日:2024/10/21(Mon) 08:47:30 No.1035
すぐに修正版を出していただき、ありがとうごいます。
早速使用させていただいており、問題なく利用できております。さて、smb接続ですが、まだ確認取れていないのですが、macOSのsmdサーバーの実装に不具合ありまくりとの報告が上がっておりますので、権限エラーもそのあたりに関係してそうです。書き込みできて読み込みできないておかしいですから、、、

- WebForum -