BugTrack/2055
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
* [owner] タイムスタンプを更新しない時にエラー [#y6b9799a]
-ページ: [[BugTrack2]]
-投稿者: [[ishii]]
-優先順位: 低
-状態: 完了
-カテゴリー: 本体バグ
-投稿日: 2005-04-12 (火) 05:41:16
-バージョン: 今朝のCVS版
** 修正 [#q6568821]
「タイムスタンプを更新しない」にチェックして更新をかけた...
- [[cvs:lib/file.php]] (1.15-1.21)
-- 関数 pkwk_chown() を追加。可能であれば(ファイルを作り...
-- 関数 pkwk_touch_file() を追加。pkwk_chown()を呼ぶtouch...
-- touch() の代わりに pkwk_touch_file() を呼ぶように修正
----
**メッセージ [#j216a019]
データファイルのオーナーがウェブサーバーの実行ユーザーで...
解除、タイムスタンプを更新しないにチェックして更新すると...
出て終了してしまいます。
Touch failed for: 46726F6E7450616765.txt
レンタルサーバー等でパーミッションの変更は可能でも、オー...
合が考えられるので lib/file.php の 1.13 -> 1.14 は戻して...
いますがどうでしょうか?このチェックはチョット厳し過ぎる...
んて (^^;
----
-そもそも編集時にファイルオーナーが違う場合にファイルを作...
$phpuser = posix_getuid();
if( fileowner("$file") != $phpuser ) {
copy("$file","$file.tmp");
unlink("$file");
rename("$file.tmp","$file");
}
この程度かなと思います。copy して unlink して rename は処...
-http://jp2.php.net/manual/ja/ref.posix.php ここを見ると...
-おお、そうは起きないかと思ったら、結構影響が大きいですね...
------------------
** (touch()のために)ファイル所有者の自動修正 [#z4b245a9]
-chown(ファイル所有者の変更)を目的とするrenameを盛り込む...
-ということで作ってみました。今後は、UIDが異なる場合は自...
-- 確認したところ、posix_getuid() はWindowsでは使えません...
---------------------
「タイムスタンプを更新しない」にチェックして更新をかけた...
- [[cvs:lib/file.php]] (1.15-1.18)
-- 関数 pkwk_chown() を追加。可能であれば(ファイルを作り...
-- 関数 pkwk_touch_file() を追加。pkwk_chown()を呼ぶtouch...
-- touch() の代わりに pkwk_touch_file() を呼ぶように修正
- 同じ件: [[BugTrack/124]]
------------
** touch() の第三引数と マウント時の noatime オプション ...
-1.18試してみました。Debian/Woodyだとtouch()の第3引数の指...
ようで、以下のようなエラーが出てしまいます。
Warning: Wrong parameter count for touch() in lib/file.p...
pkwk_touch_file(): Invalid UID and (not writable for the...
Sargeだと問題ないのですが… (^^; あと、mountオプションでno...
いる場合も考えられるのでatime は指定しないほうが良いと思...
でも参照している個所は無かったはずなので。あと、$tmpをコ...
の場合に実行権限が付いてしまうのでchmodも同時に行ったほう...
と言うことでパッチを書いてみました。 どうでしょうか? -- ...
Index: lib/file.php
========================================================...
RCS file: /cvsroot/pukiwiki/pukiwiki/lib/file.php,v
retrieving revision 1.18
diff -u -r1.18 file.php
--- lib/file.php 16 Apr 2005 04:59:09 -0000 1.18
+++ lib/file.php 16 Apr 2005 20:16:43 -0000
@@ -537,8 +537,8 @@
// NOTE: @unlink() before rename() is for Windows but...
flock($ffile, LOCK_EX) or die('pkwk_chown(): flock() ...
$result = copy($filename, $tmp) &&
- ($preserve_time ? touch($tmp, $stat[9], $stat[8]) : ...
- rename($tmp, $filename);
+ ($preserve_time ? touch($tmp, $stat[9]) : TRUE) &&
+ chmod($tmp, 0666) && rename($tmp, $filename);
flock($ffile, LOCK_UN) or die('pkwk_chown(): flock() ...
fclose($ffile) or die('pkwk_chown(): fclose() failed');
-コメントありがとうございます :) まずは時間順に並べかえさ...
-Debian woodyについてはもう少し PHP touch() について確認...
-ファイルシステムのマウントオプション noatimeについてはそ...
-一方で、今のところPHPマニュアルによればtouch()は第三引数...
- ($preserve_time ? touch($tmp, $stat[9], $stat[8]) : TR...
+ // touch() without atime for Debian woody or PHP 4.1.x...
+ ($preserve_time ? (touch($tmp, $stat[9], $stat[8]) || ...
-久しぶりにVMwareの中のwoodyを引っ張り出して、折角なのでa...
-- [[cvs:lib/file.php]] (1.19): Clean temporary file if f...
-ふむ。テストコードを書きましたが、woody上のPHP 4.1.2 の ...
<?php
$stat = stat(__FILE__);
var_dump($stat);
echo '<br>';
var_dump(touch('test.txt', $stat[9], $stat[8]));
?>
apt-get source にてソースを引っ張り出しました。
該当のエラーを吐いている所:
./php4-4.1.2/Zend/zend_API.c: zend_error(E_WARNING, "W...
PHP touch()関数だろう所:
./php4-4.1.2/ext/standard/filestat.c:PHP_FUNCTION(touch)
/* {{{ proto bool touch(string filename [, int time])
Set modification time of file */
PHP_FUNCTION(touch)
{
<snip>
int ac = ZEND_NUM_ARGS();
if (ac == 1 && zend_get_parameters_ex(1, &filenam...
<snip>
} else if (ac == 2 && zend_get_parameters_ex(2, &...
<snip>
} else {
WRONG_PARAM_COUNT;
}
-関数定義の先頭と、中にも書いてある通り、本当に三番目の引...
- Add three-parameter touch() which enables users to set
mtime/atime to different values.
-- http://cvs.php.net/diff.php/php-src/ext/standard/files...
-最初に実装されたのは filestat.c (revision 1.87) であるよ...
-ということで発見者の [[ishii]] さんには http://jp.php.ne...
-- [[ishii]]さんお忙しくなってしまったかな? もう暫く反応...
---ああっ、すいません、コメントしちゃってください。((GWっ...
-- コメントしてみました。採用されたとして、掲載されたり、...
-- この件、全然反映されていない気がする! -- [[henoheno]] ...
#comment
------------
-古いPHPの恒久的な問題であるようですので、先のコードを追...
-- [[cvs:lib/file.php]] (1.20): (PHP 4 < PHP 4.2.0) touch...
------------
** chown [#p0d6038c]
-copy() で実行権がついてしまう件も確認しました。ただ読み...
-- copy() する先のファイルをあらかじめtouch()で作成してお...
-- [[cvs:lib/file.php]] (1.21): touch() before copy() is ...
#comment
終了行:
* [owner] タイムスタンプを更新しない時にエラー [#y6b9799a]
-ページ: [[BugTrack2]]
-投稿者: [[ishii]]
-優先順位: 低
-状態: 完了
-カテゴリー: 本体バグ
-投稿日: 2005-04-12 (火) 05:41:16
-バージョン: 今朝のCVS版
** 修正 [#q6568821]
「タイムスタンプを更新しない」にチェックして更新をかけた...
- [[cvs:lib/file.php]] (1.15-1.21)
-- 関数 pkwk_chown() を追加。可能であれば(ファイルを作り...
-- 関数 pkwk_touch_file() を追加。pkwk_chown()を呼ぶtouch...
-- touch() の代わりに pkwk_touch_file() を呼ぶように修正
----
**メッセージ [#j216a019]
データファイルのオーナーがウェブサーバーの実行ユーザーで...
解除、タイムスタンプを更新しないにチェックして更新すると...
出て終了してしまいます。
Touch failed for: 46726F6E7450616765.txt
レンタルサーバー等でパーミッションの変更は可能でも、オー...
合が考えられるので lib/file.php の 1.13 -> 1.14 は戻して...
いますがどうでしょうか?このチェックはチョット厳し過ぎる...
んて (^^;
----
-そもそも編集時にファイルオーナーが違う場合にファイルを作...
$phpuser = posix_getuid();
if( fileowner("$file") != $phpuser ) {
copy("$file","$file.tmp");
unlink("$file");
rename("$file.tmp","$file");
}
この程度かなと思います。copy して unlink して rename は処...
-http://jp2.php.net/manual/ja/ref.posix.php ここを見ると...
-おお、そうは起きないかと思ったら、結構影響が大きいですね...
------------------
** (touch()のために)ファイル所有者の自動修正 [#z4b245a9]
-chown(ファイル所有者の変更)を目的とするrenameを盛り込む...
-ということで作ってみました。今後は、UIDが異なる場合は自...
-- 確認したところ、posix_getuid() はWindowsでは使えません...
---------------------
「タイムスタンプを更新しない」にチェックして更新をかけた...
- [[cvs:lib/file.php]] (1.15-1.18)
-- 関数 pkwk_chown() を追加。可能であれば(ファイルを作り...
-- 関数 pkwk_touch_file() を追加。pkwk_chown()を呼ぶtouch...
-- touch() の代わりに pkwk_touch_file() を呼ぶように修正
- 同じ件: [[BugTrack/124]]
------------
** touch() の第三引数と マウント時の noatime オプション ...
-1.18試してみました。Debian/Woodyだとtouch()の第3引数の指...
ようで、以下のようなエラーが出てしまいます。
Warning: Wrong parameter count for touch() in lib/file.p...
pkwk_touch_file(): Invalid UID and (not writable for the...
Sargeだと問題ないのですが… (^^; あと、mountオプションでno...
いる場合も考えられるのでatime は指定しないほうが良いと思...
でも参照している個所は無かったはずなので。あと、$tmpをコ...
の場合に実行権限が付いてしまうのでchmodも同時に行ったほう...
と言うことでパッチを書いてみました。 どうでしょうか? -- ...
Index: lib/file.php
========================================================...
RCS file: /cvsroot/pukiwiki/pukiwiki/lib/file.php,v
retrieving revision 1.18
diff -u -r1.18 file.php
--- lib/file.php 16 Apr 2005 04:59:09 -0000 1.18
+++ lib/file.php 16 Apr 2005 20:16:43 -0000
@@ -537,8 +537,8 @@
// NOTE: @unlink() before rename() is for Windows but...
flock($ffile, LOCK_EX) or die('pkwk_chown(): flock() ...
$result = copy($filename, $tmp) &&
- ($preserve_time ? touch($tmp, $stat[9], $stat[8]) : ...
- rename($tmp, $filename);
+ ($preserve_time ? touch($tmp, $stat[9]) : TRUE) &&
+ chmod($tmp, 0666) && rename($tmp, $filename);
flock($ffile, LOCK_UN) or die('pkwk_chown(): flock() ...
fclose($ffile) or die('pkwk_chown(): fclose() failed');
-コメントありがとうございます :) まずは時間順に並べかえさ...
-Debian woodyについてはもう少し PHP touch() について確認...
-ファイルシステムのマウントオプション noatimeについてはそ...
-一方で、今のところPHPマニュアルによればtouch()は第三引数...
- ($preserve_time ? touch($tmp, $stat[9], $stat[8]) : TR...
+ // touch() without atime for Debian woody or PHP 4.1.x...
+ ($preserve_time ? (touch($tmp, $stat[9], $stat[8]) || ...
-久しぶりにVMwareの中のwoodyを引っ張り出して、折角なのでa...
-- [[cvs:lib/file.php]] (1.19): Clean temporary file if f...
-ふむ。テストコードを書きましたが、woody上のPHP 4.1.2 の ...
<?php
$stat = stat(__FILE__);
var_dump($stat);
echo '<br>';
var_dump(touch('test.txt', $stat[9], $stat[8]));
?>
apt-get source にてソースを引っ張り出しました。
該当のエラーを吐いている所:
./php4-4.1.2/Zend/zend_API.c: zend_error(E_WARNING, "W...
PHP touch()関数だろう所:
./php4-4.1.2/ext/standard/filestat.c:PHP_FUNCTION(touch)
/* {{{ proto bool touch(string filename [, int time])
Set modification time of file */
PHP_FUNCTION(touch)
{
<snip>
int ac = ZEND_NUM_ARGS();
if (ac == 1 && zend_get_parameters_ex(1, &filenam...
<snip>
} else if (ac == 2 && zend_get_parameters_ex(2, &...
<snip>
} else {
WRONG_PARAM_COUNT;
}
-関数定義の先頭と、中にも書いてある通り、本当に三番目の引...
- Add three-parameter touch() which enables users to set
mtime/atime to different values.
-- http://cvs.php.net/diff.php/php-src/ext/standard/files...
-最初に実装されたのは filestat.c (revision 1.87) であるよ...
-ということで発見者の [[ishii]] さんには http://jp.php.ne...
-- [[ishii]]さんお忙しくなってしまったかな? もう暫く反応...
---ああっ、すいません、コメントしちゃってください。((GWっ...
-- コメントしてみました。採用されたとして、掲載されたり、...
-- この件、全然反映されていない気がする! -- [[henoheno]] ...
#comment
------------
-古いPHPの恒久的な問題であるようですので、先のコードを追...
-- [[cvs:lib/file.php]] (1.20): (PHP 4 < PHP 4.2.0) touch...
------------
** chown [#p0d6038c]
-copy() で実行権がついてしまう件も確認しました。ただ読み...
-- copy() する先のファイルをあらかじめtouch()で作成してお...
-- [[cvs:lib/file.php]] (1.21): touch() before copy() is ...
#comment
ページ名: