2012-09-17 20 views
6

Tôi đã cố gắng thực hiện một số tập lệnh để tải xuống tệp qua FTP từ máy chủ cục bộ của tôi Apache trong CentOS và tôi không thể làm cho nó hoạt động!Không thể kết nối với FTP với PHP ftp_connect từ localhost

Mã Tôi đang sử dụng là rất được sử dụng bởi bất kỳ yêu cầu ftp cơ bản:

<?php 
$ip= FTP_IP_HERE; 
$port='21'; 
$timeout='90'; 
$un='username'; 
$pw='password'; 

// Connect to ftp 
$conn_id = ftp_connect($ip,$port,$timeout); 

// Open a session to an external ftp site 
$login_result = ftp_login ($conn_id, $un, $pw); 

// Check open 
if ((!$conn_id) || (!$login_result)) { 
    print "FTP connection failed!"; 
    exit(); 
} 

// turn on passive mode transfers 
if (ftp_pasv($conn_id, true) == FALSE) { 
    print "Passive FTP connection failed!"; 
    exit(); 
} 

tôi đã cố gắng cùng một kịch bản trên máy chủ từ xa và nó làm việc! Tôi không chắc chắn nếu nó là bất kỳ cấu hình apache được thực hiện, hoặc một giới hạn PHP chính nó.

CẬP NHẬT:

Dưới đây là các bản ghi lỗi:

Warning: ftp_login() expects parameter 1 to be resource, boolean given in /var/www/html/ftp/FTP.php on line 16 

Warning: ftp_get() expects parameter 1 to be resource, boolean given in /var/www/html/ftp/FTP.php on line 22 
Falha ao enviar o arquivo test.pdf<br />Array 
(
    [type] => 2 
    [message] => ftp_get() expects parameter 1 to be resource, boolean given 
    [file] => /var/www/html/ftp/FTP.php 
    [line] => 22 
) 

Warning: ftp_close() expects parameter 1 to be resource, boolean given in /var/www/html/ftp/FTP.php on line 30 

Trả lời

4

Đầu tiên chắc chắn rằng nó không phải là một vấn đề với tường lửa hoặc một cái gì đó tại địa phương. Hãy thử FTP từ bất kỳ công cụ nào khác, ví dụ:

wget --user=username --password='password' ftp://FTP_IP_HERE/file_to_download 

Nếu cũng không kết nối được, đó là vấn đề với cài đặt mạng của bạn.

Nếu wget vượt qua bài kiểm tra bạn cũng có thể thử cho phép báo cáo lỗi verbose để xem những gì xảy ra với attemp PHP của bạn bằng cách đặt này ở phía trên cùng của mã của bạn:

<?php 
ini_set('display_errors',1); 
error_reporting(E_ALL|E_STRICT); 

Cuối cùng, điều này có thể cũng liên quan đến trường hợp của bạn: Cannot connect with FTP server with PHP , ftp_connect()

+0

Tôi đã thử nghiệm tải về các tập tin với wget và nó tải –

+0

tôi thấy log lỗi của bạn, vì vậy ftp_connect trả về FALSE trong trường hợp của bạn. – Yuriy

+0

Cố gắng thay thế máy chủ lưu trữ/ip của bạn bằng mã với ftp.mozilla.org hoặc bất kỳ máy chủ FTP công khai nào khác và xem nó có mở hay không. Sau đó, bạn đang sử dụng 'ftp: //' ở phía trước IP máy chủ của bạn? Đừng nhớ nếu đó là cần thiết, hãy thử cả hai có và không có tiền tố đó. – Yuriy

1

Try '127.0.0.1' thay vì 'localhost'

ftp_connect('127.0.0.1', 21); 
9

Ok, tôi đã cùng một vấn đề và tôi tìm thấy giải pháp cho trường hợp của tôi. Đăng nó ở đây để giúp đỡ người khác.

Tập lệnh PHP của tôi sẽ thất bại nhưng tôi có thể dễ dàng FTP qua dòng lệnh. Tôi đã xác minh tường lửa của mình không chặn tập lệnh và tôi không nhận được bất kỳ lỗi PHP nào trong nhật ký của mình ...

Sau khi tìm kiếm xung quanh, có vẻ như vấn đề của tôi là SELinux. Tôi không muốn tắt nó vì vậy tôi đã kiểm tra trạng thái của httpd_can_network_connect.

Kiểm tra trạng thái của bạn bằng cách chạy:

getsebool httpd_can_network_connect 

Nếu bạn nhận được:

httpd_can_network_connect --> off 

Đây có thể là vấn đề của bạn.

Lưu ý:

Nếu bạn đã có on này:

httpd_can_network_connect --> on 

hoặc

SELinux is disabled 

Sau đó, điều này sẽ không giải quyết vấn đề của bạn ... Chúc may mắn tìm bạn dung dịch.

Cách khắc phục

Enable httpd_can_network_connect bằng cách chạy:

setsebool httpd_can_network_connect=1 

Kiểm tra kịch bản của bạn một lần nữa và xem nếu nó hoạt động. Điều này làm việc cho tôi vì vậy tôi đã chắc chắn để thiết lập một chính sách để giữ cho điều này được kích hoạt.

setsebool -P httpd_can_network_connect=1 

LƯU Ý: -P đặt chính sách để nó kéo dài hơn một khởi động lại

+1

NÀY. Cảm ơn Jeremy, điều này đã giải quyết tốt vấn đề của tôi. – Scorchio

+1

cảm ơn bạn. giờ làm việc nhận được không có nơi và nó đã được selinux chết tiệt một lần nữa! – user1017063

+1

Jebus ngọt ngào! điều này cố định vấn đề của tôi cũng không phải tôi cảm thấy dày .. – Sam