スレッド表示 | フラット表示〕 全トピック 920 件中 138 番目 次≫ ≪前

ファイル書き込み時のファイルパスについて

created: 2007-02-17 23:34 | modified: 2007-02-19 10:41 | reply: 6

[3591] ファイル書き込み時のファイルパスについて

user: haseta | created: 2007-02-17 23:34
あるテキストファイルに書き込みをするプログラムを作成しました。
Windows上では問題なく書き込みできたのですが、UNIXサーバにアップして動作確認をした際、まったく書き込みがされません。コードは以下の通りです。
<?php
(略)
$dirfile = dirname(__FILE__)."/count.dat";
// ↑Windowsの場は"/count.dat"→"\\count.dat"
$buf="(書き込み内容)";
$fp = fopen($dirfile, "a");
flock($fp, LOCK_EX);
fputs($fp. $buf);
flock($fp, LOCK_UN);
fclose($fp);
(略)
?>
ファイル権限の問題かと思い、count.datのパーミッション設定を644→666等に変更してみましたが変化なしでした。

UNIX上ではどのようなファイルパスの記述をしたらよいのでしょうか?
ご存知の方がいらっしゃいましたら、ご教示下さい。
よろしくお願いします。
reply: 3592 返信 編集 削除

[3592] ディレクトリもパミッション設定

user: ゆうじ | created: 2007-02-17 23:52
こんばんわ。

ファイルパスの記述が問題ではなく
おそらくパミッションが原因だと思いますよ。

ディレクトリも、ウェブサーバの権限で
書き込みできるよう設定が必要かと思います。

こういうときはエラーメッセージを挙げてもらえると
解決のヒントになります。
Parent: 3591  reply: 3593 返信 編集 削除

[3593] パーミッション確認しました

user: haseta | created: 2007-02-18 10:50
ゆうじさん、レス有難うございます。

エラーメッセージは出ないんです。
ブラウザ上では(略)の部分に実際には記載してある後続の処理を正常に行なっており、見た目はプログラムが正常に動作しているように見えます。
しかし、count.datには一切何も記載されていないという状態です。

このプログラムが入っているディレクトリのパーミッションは755でした。ですので、問題はないかと思われます。念のため、一時的にこのパーミッションを777にして試してみましたがやはり変化なしでした。
(このパーミッション以外に管理者側で設定が必要なものがあるのであれば、管理者に相談しないといけないのですが。)
Parent: 3592  reply: 3594 返信 編集 削除

[3594] 訂正・ディレクトリのパミッション設定

user: ゆうじ | created: 2007-02-18 14:42
試しにココのサーバで
count.dat --- 606
ディレクトリ --- 705
でやってみたところエラーが出ました。

Warning: Wrong parameter count for fputs() ...

fputs($fp. $buf);

$fp の後ろがドットになってましたね。
これを直したら書き込みできました。

ディレクトリのパミッションは関係なかったようです。すみません。


エラーメッセージが出ないのは、
出さない設定になってるのでしょう。
製作中は意図して出すよう指定しといた方がいいですね。

error_reporting(E_ALL ^ E_NOTICE);
Parent: 3593  reply: 3596 返信 編集 削除

[3596] Re:訂正・ディレクトリのパミッション設定

user: haseta | created: 2007-02-18 21:40
ゆうじさん、すみません。掲示板に書く時に転記ミスしました。
実際のプログラムではfputs($fp, $buf);となっています。
この状態で書き込みされません。
ですので、記述ミスが原因とは考えにくいです。(Windowsではちゃんと動くわけですし。)

UNIXの方は私の方でphp.iniを変更できないのでちょっと難しいです。(そのためWindowsでチェックした上でUNIXで動作確認しています。)
Parent: 3594  reply: 3599 返信 編集 削除

[3599] 再テストコード

user: ゆうじ | created: 2007-02-19 01:32
error_reporting は、
スクリプトで設定できるのでお試しください。


原因を絞り込むのにもっと簡単なコードを試してみては。
ちなみにこちらはLinuxサーバですが。
ウェブサーバが「その他」なので、該当ディレクトリを 705 、
count.dat はあらかじめ空のファイルをアップロードして
606 に設定し以下のコードを実行してみました。

エラーもなくブラウザには 10 が表示され、
count.datにも$buffの内容が追記されています。

<?php
error_reporting(E_ALL);

$file = dirname(__FILE__). '/count.dat';
$buff = '0123456789';

if ($fp = fopen($file, 'a')) {
$len = fputs($fp, $buff);
fclose($fp);
echo $len;
} else {
echo 'Not open';
}

?>

これでエラーも無く書き込みも出来ないなら、
UNIXサーバ固有の何かでしょうね。
私には残念ながらわかりません。
Parent: 3596  reply: 3604 返信 編集 削除

[3604] Re:再テストコード(解決しました)

user: haseta | created: 2007-02-19 10:41
うまく動作しました。

ご提示いただいたコードをもとに再度作り直したら正常に書き込まれました。
おそらくファイルのアクセス権限やらパスの指定など様々な要因が重なっていたように思われます。

ゆうじさん、本当に有難うございました。
Parent: 3599  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 138 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑