1

http POST 経由で受け入れているファイルの名前を変更しようとしています。コードを見てください:

<?php
$xmlData = fopen('php://input' , 'rb');
while (!feof($xmlData)) { $xmlString .= fread($xmlData, 4096); }
fclose($xmlData);

file_put_contents('temp/message' . date('m-d-y') . '-' . time() . '.xml', $xmlString, FILE_APPEND);

$xml = new SimpleXMLElement($xmlString);

$id = trim($xml->MSG->ID);
$receiver = trim($xml->MSG->RECEIVER);
$message = trim($xml->MSG->MESSAGE);
$sender = trim($xml->MSG->SENDER);
$binary = trim($xml->MSG->BINARY);
$sent = trim($xml->MSG->SENT);

foreach ($xml->{'line-items'}->{'line-item'} as $lineItem) {
  array_push($messageTitles, trim($lineItem->title));
}

header('HTTP/1.0 200 OK');
exit();

今、私はこれの名前を変更する方法で少し途方に暮れていますか?

4

1 に答える 1

3

XML ツリーを処理するためにファイルを保存する必要さえありません。file_put_contents(...)そのため、ファイルを処理して最後に移動できます。

<?php
$xmlData = fopen('php://input' , 'rb');
while (!feof($xmlData)) { $xmlString .= fread($xmlData, 4096); }
fclose($xmlData);

$xml = new SimpleXMLElement($xmlString);

$id = trim($xml->MSG->ID);
$receiver = trim($xml->MSG->RECEIVER);
$message = trim($xml->MSG->MESSAGE);
$sender = trim($xml->MSG->SENDER);
$binary = trim($xml->MSG->BINARY);
$sent = trim($xml->MSG->SENT);

foreach ($xml->{'line-items'}->{'line-item'} as $lineItem) {
  array_push($messageTitles, trim($lineItem->title));
}

file_put_contents("temp/$receiver.xml", $xmlString, FILE_APPEND); // warning: security issue here

header('HTTP/1.0 200 OK');
exit();

ユーザーが任意の名前でファイルに名前を付けるのを防ぐために、セキュリティ制限を適用する必要があることに注意してください。

于 2013-07-30T12:50:34.577 に答える