$filename = mb_str_replace("%DURATION%","".$duration, $filename );
// あると面倒くさそうな文字を全部_に
- $filename = preg_replace("/[ \.\/\*:<>\?\\|()\'\"&]/u","_", trim($filename) );
+// $filename = preg_replace("/[ \.\/\*:<>\?\\|()\'\"&]/u","_", trim($filename) );
+
+ // preg_replaceがUTF-8に対応できない環境があるようなのでmb_ereg_replaceに戻す
+ $filename = mb_ereg_replace("[ \./\*:<>\?\\|()\'\"&]","_", trim($filename) );
// 文字コード変換
if( defined("FILESYSTEM_ENCODING") ) {
return false;
}
-// 指定したプロセスハンドルが生成した子プロセスのpidリストを返す
+// 指定したプロセスIDが生成した子プロセスのpidリストを返す
// こういうやり方しかないのか?
//
-function epgrec_childproc( $p )
+function epgrec_childproc( $ppid )
{
- $st = proc_get_status( $p );
- $ppid = $st['pid'];
-
// ps を実行する
$d = array(
0 => array( 'file','/dev/null','r' ),
fclose( $pipes[1] );
proc_close( $ps );
+ foreach( $cpids as $p ) {
+ $ccpids = epgrec_childproc( $p );
+ foreach( $ccpids as $ccpid ) {
+ array_push( $cpids, $ccpid );
+ }
+ }
return $cpids;
}
system( "ps ax >>".$logfile );
system( "echo ------- >>".$logfile );
}
-
- $cpids = epgrec_childproc( $p );
+ $status = proc_get_status( $p );
+ $cpids = epgrec_childproc( $status['pid'] );
if( DEBUG ) {
global $logfile;
system( "echo ------- >>".$logfile );
}
+ // 親から止める
@proc_terminate( $p );
- sleep(1);
+ usleep(500*1000);
@proc_terminate( $p ); // 2度送る
foreach( $cpids as $cpid ) {
- $ret = posix_kill( $cpid, SIGTERM ); // sigterm
+ $ret = posix_kill( $cpid, SIGTERM ); // sigterm
usleep(100*1000);
if( ! $ret ) posix_kill( $cpid, SIGKILL ); // sigkill
}
system( "echo ------- >>".$logfile );
}
+ /* プロセスがしばらく居残る場合がある
foreach( $cpids as $cpid ) {
$ret = posix_kill( $cpid, SIGTERM ); // sigterm
- if( $ret ) return false; // 恐らくプロセスが存在するのでエラー
+ if( $ret ) return false; // 恐らくプロセスが存在するのでエラー
}
+ */
return true; // 保証できない
}
if( time() < $endtime ) {
$rrec->endtime = toDatetime( time() );
}
-
// 完了フラグを立てておく
$rrec->complete = '1';
try {
$reserve = new DBRecord( RESERVE_TBL, "program_id", $rec->id );
- if( $reserve->dirty == 0 ) {
+ // dirtyが立っておらず現在より後の録画予約であるなら
+ if( ($reserve->dirty == 0) && (toTimestamp($reserve->starttime) > time()) ) {
$reserve->title = $title;
$reserve->description = $desc;
reclog( "getepg:: 予約ID".$reserve->id."のEPG情報が更新された" );