試試這個代碼,這將不會創建一個需要被刪除本地文件:
// Define URL
$url = "http://xxxx/123_{$matches[1]}";
// Open pointer to remote resource
if (!$remoteFP = @fopen($url, 'r')) {
header("{$_SERVER['SERVER_PROTOCOL']} 500 Internal Server Error");
exit;
}
// Get content length and type from remote server's headers
$length = $type = NULL;
foreach ($http_response_header as $header) { // Loop headers (see http://php.net/manual/en/reserved.variables.httpresponseheader.php)
list($name, $val) = explode(':', $header, 2); // Split to key/value
switch (strtolower(trim($name))) { // See if it's a value we want
case 'content-length':
$length = (int) trim($val);
break;
case 'content-type':
$type = trim($val);
break;
}
if ($length !== NULL && $type !== NULL) break; // if we have found both we can stop looping
}
// Send headers
if ($type === NULL) $type = 'text/plain';
header("Content-Type: $type");
if ($length) header("Content-Length: $length"); // Only send content-length if the server sent one. You may want to do the same for content-type.
// Open a file pointer for the output buffer
$localFP = fopen('php://output', 'w');
// Send the data to the remote party
stream_copy_to_stream($remoteFP, $localFP);
// Close streams and exit
fclose($remoteFP);
fclose($localFP);
exit;
它使用了捲曲等的fopen()
方法,因爲它允許一個簡單的實體到輸出緩衝區,以及在主體完全收到之前訪問遠程服務器的響應頭。這是使用PHP進行代理的最節約資源的方式。
如果您的服務器禁用了allow_url_fopen
,您可能可以使用cURL,它也允許您將數據直接傳遞到輸出緩衝區,但不允許您從遠程服務器解析和轉發標頭。
您是否嘗試過使用'unlink($ file);'如果您還不行,請嘗試驗證文件的所有權以及php對您使用的內容以及文件權限。 – Prix 2012-04-11 13:08:46
@Hakre - 撤銷您的更改...如果有一個簡單的錯誤,請在評論或答案中寫下,但這不是我的腳本,因此,有人可能會得到錯誤的想法或在該行上找到答案等等 – Wil 2012-04-11 13:18:00
@Prix - 之前從未聽說過取消鏈接,所以,現在...現在閱讀它...(僅供參考,這是我的第一個PHP腳本...當然沒有專業版)。 – Wil 2012-04-11 13:18:54