2016-11-30 22 views
2

ColdFusion11 Webサイトで問題が発生しました。特定の条件下で、レポートファイルを作成して送信しようとしても、権限の問題が原因で失敗しています。テスト/ dev環境で問題を再現することはできませんので、実際の修正で何が起こっているのかを理解する必要があります。生産上のコードを任意に変更するだけではありません。現在のコードは次のようにAPPENDアクション使用してファイルを作成します。CFFILEがAPPENDまたはWRITEを使用してファイルを作成しています

<cfset f_dir = EXCEL_PATH > 
<cfset f_name = CreateUUID() & ".csv"> 
<cffile action="WRITE" file="#f_dir##f_name#" output="My Report " 
addnewline="Yes"> 
<cffile action="APPEND" file="#f_dir##f_name#" 
output="Title,#attributes.title#" addnewline="Yes"> 

使用コード:他の場所コードで

<cfset f_dir = EXCEL_PATH > 
<cfset f_name = CreateUUID() & ".csv"> 
<cffile action="APPEND" file="#f_dir##f_name#" output="My Report " 
addnewline="Yes"> 
<cffile action="APPEND" file="#f_dir##f_name#" 
output="Title,#attributes.title#" addnewline="Yes"> 

このように、第一のcffileアクションとしてWRITEを使用して同様の機能であります書き込みが最初に失敗していない、これは私の質問につながります: action = "APPEND"とaction = "WRITE"のファイルをcoldfusion 11で作成するのに違いはありますか?

+0

あなたはそれを見て、あなたはパーミッションを疑うでしょうか? –

+0

ドキュメントではなくウェブサーバーから403エラーが発生します。 –

答えて

2

Ron - 書き込みは「作成」 - 新しいファイルを作成します。 Appendは、ディスク上の既存のファイルにデータを追加するために使用されます。彼らは異なった行動です。

は、次のようにコードを変更してみてください。

<cflock name="#f_name#"> 
<cfif NOT fileexists(f_dir & f_name)> 
    ... do your WRITE action> 
</cfif> 
</cflock> 

<cflock name="#f_name#"> 
.... do your APPEND action - you can be sure your file exists at this point. 
</cflock> 

注意が、私は通常、これらの二つのアクションをシリアライズするという名前のロックを使用します。時にはあなたのコードがリリースされていないファイルハンドル上を移動することがあります。典型的なものではありませんが、もしあなたのディスクが今までにつぶれていたら、それは起こり得る。

+0

cflockを使用している投票がアップしています。 –

+0

ありがとうございました。appendが存在しない場合、appendもファイルを作成します。私の質問は、彼らがファイルを作成する最初のコマンドとして使用されるとき、追加と書き込みの違いはありますか?つまり、2つのファイルのアクセス権が異なります。または、追加で新しいファイルを作成するとタイミングの問題が発生する可能性がありますか? –

+0

私は追加についてそれを知らなかった。私はいつも "書き込み"を使ってファイルに追加して追加しました。(知っておいてよかったです - ありがとう!)しかし、はい、私は、ファイルの作成とそれらへの書き込みには注意が必要であることを示唆しています - そして、ロックは効果的にこれら2つのイベントをシリアライズします。これらは、OSファイルシステムとJVMという2つの異なるシステムです。したがって、ファイルハンドルを解放する際に問題が生じる可能性があります。それを避ける方が良いです。 –

関連する問題