国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

PHP FTP連線問題在容器化環(huán)境下的解決方法
P粉302484366
P粉302484366 2023-08-28 23:03:17
0
1
895
<p>我正在嘗試將我的PHP腳本容器化。 </p><p>但由於某種原因,當(dāng)它在容器中運(yùn)行時(shí),無法連接到我的FTP伺服器。 </p><p>在我的本機(jī)上運(yùn)行該腳本沒有任何問題。 </p><p><strong>Dockerfile:</strong></p><pre class="brush:php;toolbar:false;">FROM php:8.1-cli EXPOSE 8080 COPY . /var/www/html/ WORKDIR /var/www/html ENTRYPOINT php -f serve.php</pre><p><strong>PHP腳本:</strong></p><pre class="brush:php;toolbar:false;">$$ connection = ftp_connect(FTP_HOST, 21, 90); ftp_pasv($connection, true); if(ftp_login($connection, FTP_USERNAME, FTP_PASSWORD)) { $stream = fopen('data://text/plain,','r'); ftp_fput($connection, $filename, $stream); } ftp_close($connection);</pre><p>90秒後,它會(huì)給予以下警告:</p><p><em>ftp_fput(): Connection timed out in /var/ www/html/ftp.php on line 16</em></p><p>我嘗試進(jìn)入容器並安裝FTP客戶端。 </p><p>它給我一個(gè)類似的超時(shí)錯(cuò)誤 - 我可以連接到主機(jī),但運(yùn)行任何命令都會(huì)導(dǎo)致停頓。 </p><p>我還嘗試在VPS上運(yùn)行容器,以消除任何本地防火牆/網(wǎng)路問題。 </p><p>但問題仍然存在。 </p><p>如果需要進(jìn)一步的資訊來解決問題,請(qǐng)告訴我。 </p>
P粉302484366
P粉302484366

全部回覆(1)
P粉775723722

注意 PHP 的 ftp_pasv 函數(shù)的文件(重點(diǎn)在我這裡):

也要注意您沒有檢查 ftp_pasv 呼叫的狀態(tài)回傳值,所以您不會(huì)注意到該呼叫是否實(shí)際成功(這很可能不會(huì)成功)。因此,您的腳本將嘗試建立主動(dòng)的 FTP 連線。這在容器中不起作用(除非使用 --network=host 啟動(dòng)),因?yàn)槿萜髟谥鳈C(jī)機(jī)器上透過 NAT 運(yùn)行在私有網(wǎng)路中。

解決方案:先登錄,然後啟用被動(dòng)模式(也要始終檢查錯(cuò)誤回傳值;許多來自 PHP 標(biāo)準(zhǔn)函式庫的舊函數(shù)不會(huì)引發(fā)異常,而是依賴錯(cuò)誤回傳值):

if (ftp_login($connection, FTP_USERNAME, FTP_PASSWORD))
{
    if (ftp_pasv($connection, true) === false) {
        throw new \Exception("無法啟用被動(dòng)模式")
    }

    $stream = fopen('data://text/plain,','r');
    ftp_fput($connection, $filename, $stream);
}
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板