2012-01-05 24 views
3

XMLファイル(test02.xml)を読み込んで別のファイルに保存しようとする短いPHPプログラムがあります。DOMDocument-> save( 'filename')を使用してxmlファイルを保存する際に問題が発生しました

プログラムは次のとおりです。

<?php 
//The next three lines are needed to open a file for writing on the server I use. 

$stream_options = array('ftp' => array('overwrite' => TRUE)); 
$stream_context = stream_context_create($stream_options); 
$fxml = fopen("ftp://userid:[email protected]/public_html/programs/test03.xml","w",0,$stream_context); 

//The next three lines create a new DOMDocument, load the input file, "test02.xml" 
//and attempt to save the loaded file in the output file "test03.xml" 

$doc = new DOMDocument; 
$doc->load("test02.xml"); 
$doc->save("test03.xml"); 
?> 

ファイルtest03.xmlが適切に開き、それが存在しない場合は作成されます。ただし、出力はありません。ロードされたファイルtest02.xmlは、空ではなく整形式のXMLです。私は他のPHPプログラムを使って読み込んで読み込みました。

私は上記のプログラムを実行すると、私はメッセージを取得:

警告:のDOMDocument :: [domdocument.save](test03.xml)を保存する:ストリームをオープンに失敗しました:中/家庭拒否許可/ yurow/

phpbuilder.com/manual/en/function.dom-domdocument-:ライン上でwwwrootに/ yurowdesigns.com /プログラム/ xmlTest.phpは8

私はで '保存' コマンドの構文をチェックしてsave.php

正しいと思われます。これを引き起こしている何の考えですか?

答えて

2

ユーザーは「yurow」(可能性の高いファイルを作成する権限を持つユーザー)ではないのに役立ちます。むしろ、それは "apache"や "httpd"のようなユーザです。しばしば、apache/httpdユーザーがWebルート内のファイルを作成できないようにシステムが設定されています。これはセキュリティ上の目的で行われており、Webルートにapache/httpdへの書き込みアクセス権を与えて回避することはお勧めしません。代わりに、/ home/yurowの中のどこかにドキュメントを作成することができます(/ home/yurow/wwwroot内にはありません)。例は/home/yurow/xmldata/test02.xmlです。このディレクトリのアクセス権を調整して、apache/httpdユーザーがそのディレクトリに書き込めるようにする必要があります。

+0

@ user1107199 ftpで見ると/ home/yurowは "/"ルートレベルです。したがって、wwwrootディレクトリの隣にxmldataディレクトリを作成するだけです。言い換えれば、あなたのftpクライアントを見ると/ wwwrootと/ xmldataを見ることができます(そこに他のものがあります) –

+0

/XMLFilesというフォルダを作成し、fopen()以下のステートメントを使用します。 $ fxml = fopen( "ftp:// userid:password!@ www.yurowdesigns.com/XMLFiles/test03.xml"、 "w"、0、$ stream_context); (10行目)$ doc-> save( "/ home/yurow/XMLFiles/test03.xml");警告:DOMDocument :: save(/home/yurow/XMLFiles/test03.xml)[domdocument.save]:ストリームのオープンに失敗しました:/ homeでの権限が拒否されました。 /yurow/wwwroot/yurowdesigns.com/programs/xmlTest.php 10行目。この赤ん坊がきつく締まっているようですね! – user1107199

+0

@ user1107199 ftpでファイルを作成してローカルで読む理由がわかりません。これを行う理由があると仮定すると、スクリプトの先頭にumask呼び出しを追加することができます。例えばumask(0000)。そして、あなたとあなたのapacheユーザが読み書きできるように、XMLFilesディレクトリが設定されていることを確認してください。 –

1

アクセス許可が拒否されたということは、ファイルにデータを書き込むための正しいアクセス許可がファイルにないため、スクリプトがxmlファイルにデータを書き込めないことを意味します。以下を試してください:

  1. 空のxmlファイル(test03.xml)を作成してください。
  2. サーバーに応じて、xmlファイルのアクセス許可を775または777に変更します。
  3. xmlデータを新しいファイルに保存します。

希望これは、ファイルを作成しようとし

+0

通常は良いアイデアです。私は他のウェブホスティングサービスでこれを行うことができましたが、このサービスへのアクセス権は持っていません。 – user1107199

+0

@ user1107199 php関数を試してみてください。http://php.net/manual/en/function.chmod.php – satrun77