2024 年 PHP 日本研討會

FTP 上下文選項

FTP 上下文選項FTP 上下文選項列表

說明

用於 ftp://ftps:// 傳輸的上下文選項。

選項

overwrite 布林值

允許覆寫遠端伺服器上已存在的檔案。僅適用於寫入模式(上傳)。

預設為 false

resume_pos 整數

開始傳輸的檔案偏移量。僅適用於讀取模式(下載)。

預設為 0(檔案開頭)。

proxy 字串

透過 HTTP 代理伺服器代理 FTP 請求。僅適用於檔案讀取操作。例如:tcp://squid.example.com:8000

注意事項

注意底層 Socket 串流上下文選項
額外的上下文選項可能受到底層傳輸方式支援。對於 ftp:// 串流,請參考 tcp:// 傳輸方式的上下文選項。對於 ftps:// 串流,請參考 ssl:// 傳輸方式的上下文選項。

新增註記

使用者貢獻的註記 3 則註記

php dot net at misterchucker dot com
15 年前
以下是如何允許 fopen() 覆寫 FTP 站點上檔案的範例。如果未修改串流上下文,將會發生錯誤:「...failed to open stream: Remote file already exists and overwrite context option not specified...」(...無法開啟串流:遠端檔案已存在且未指定覆寫上下文選項...)。

<?php
// FTP 檔案的路徑,包含登入參數
$ftp_path = 'ftp://username:password@example.com/example.txt';

// 允許覆寫遠端 FTP 伺服器上的現有檔案
$stream_options = array('ftp' => array('overwrite' => true));

// 使用已定義的選項建立串流上下文資源
$stream_context = stream_context_create($stream_options);

// 開啟檔案以進行寫入並將其截斷為零長度
if ($fh = fopen($ftp_path, 'w', 0, $stream_context))
{
// 將內容寫入檔案
fputs($fh, 'example contents');

// 關閉檔案控制代碼
fclose($fh);
}
else
{
die(
'Could not open file.');
}
?>
dev at codesatori dot com
8 年前
顯然,只有在缺少 overwrite 選項時,它才會被註冊為 false。如果我將其指定為 false,它的行為與 true 相同,並且會覆寫。那麼,
<?php
if (empty($opts['overwrite'])) {
unset(
$opts['overwrite']);
}
?>
...是我具有預設選項的 FTP 串流包裝器類別的簡單修復方法。雖然這相當出乎意料;即使我這麼說,false 也表示 false?顯然 PHP (7.0.2) 只會檢查選項是否存在,而不是其布林值。
instatiendaweb at gmail dot com
3 年前
// ftp 的路徑必須與 localhost 的路徑相符
$ftp_path = 'ftp://francisco:aaa@localhost:21/ftparchivo.txt';
// 寫入串流選項
$stream_options = array('ftp' => array('overwrite' => TRUE));
// 建立一個上下文
$stream_context = stream_context_create($stream_options);
\escribir::verifacionnota($stream_context, 'STREAMCONTEXT');
// 開啟要讀取的檔案
$flujo = fopen($ftp_path, 'r', false, $stream_context);
//建立函式:vardump + 字串
\escribir::verifacionnota($flujo, 'VARDUMP FOPEN');

$contenido = '';
//翻譯:當檔案內容尚未到達檔案結尾時 ==> feof
while (!feof($flujo)) {
//則從檔案讀取 8192 位元組,並將其附加到變數 contenido
$contenido .= fread($flujo, 8192);
}
\escribir::verifacionnota($contenido, 'VARDUMP CONTENIDO');
//關閉串流
fclose($flujo);
To Top