현재 문제

현재 문제

나는 안정적인 Debian 시스템에서 Apache 웹 서버를 실행하고 있으며 이 PHP 프로그램은 원격 온라인 서버 등에 연결하기 위해 FTP를 사용해야 합니다.

FTP 서버( vsftpd버전 3.0.3-8+b1)를 설치하기 전까지는 모든 것이 잘 작동했지만 이것이 원인이라고는 생각하지 않습니다.

이제 이 오류가 발생합니다.

정확한 오류는 다음과 같습니다.

I won't open a connection to x.x.x.x --->*remote server ip* (only to x.x.x.x ---->*my public ip*)

ls원격 디렉터리에 액세스할 수도 없고 대신 다음 오류가 발생합니다.

Unable to list directory

나는 이것이 FTP가 이제 "기본적으로" 활성 모드에서 실행되기 때문이라고 생각하지만 실제로는 확실하지 않습니다. 이러한 오류는 수동 모드와 관련된 것 같습니다.

어떻게 생각하나요?

  • 데비안 버전: Debian GNU/Linux 9
  • PHP 버전: 7.0.30-0+deb9u1

우리가 논의하고 있는 PHP 루틴은 다음 ftp_login()과 같습니다:ftp_fput()

ftp_pasv(, true)사용할 때마다 잘 작동하기 때문에 자동 활성화 모드인 것 같아요 . 미리 구체적으로 설명할 필요는 없습니다.

답변1

현재 문제

원격 서버에 연결할 수 없다고 보고합니다 ftp. 다음과 같은 오류 메시지가 나타납니다.

I won't open a connection to x.x.x.x remote server ip (only to x.x.x.x my public ip)

서버 솔루션 으로 사용 php ftp하는지 여부에 따라 2가지 가능한 솔루션을 찾았습니다 .vsftpdftp

1. 가능한 VSFTP 구성 수정

구성을 수정해야 할 수도 있습니다 vsftp. 내가 찾았어이 포럼 게시물은 nhtrader 사용자가 게시했습니다.이는 가능한 해결책을 제공할 수 있습니다. 해당 사항이 귀하에게 적용되는지 확인하려면 전체 내용을 읽어보시기 바랍니다.

  • 첫째, 이것은 ftp원격 서버입니까, 아니면 집/LAN 내에 있는 서버입니까? 서비스를 사용하지 않고도 서버를 인증하거나 적어도 서버와 통신할 수 있는지 확인하세요 ftp.

  • 둘째, 라우터가 포트 전달을 지원하는지 확인하고 필요한 관련 포트를 라우터의 포트 전달 목록에 추가하세요. VPS를 ftp서버로 사용하는 경우 포트 전달 및 지원 방법 ftp, 인증, 원격 관리 등에 대한 설명서를 참조하세요.

  • GRC,좋은 도구를 제공합니다홈 네트워크가 필요한 포트나 서비스를 차단하고 있지 않은지 확인하세요. 이는 포트 전달이 제대로 작동하고 ISP에 의해 차단되지 않았는지 확인하는 좋은 방법입니다. 또한 사용하려는 포트를 통한 연결을 허용하려면 호스트와 서버에 방화벽 규칙을 만들어야 합니다.

  • 셋째, vsftpd에 있는 구성 파일을 편집합니다 /etc/vsftpd.conf.

다음 명령을 사용하여 파일에 다음 항목을 추가합니다 sudo nano /etc/vsftpd.conf.

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
idle_session_timeout=600
data_connection_timeout=120
ftpd_banner=[Whatever message of your choice]
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem

다음 항목을 사용하면 사용할 포트를 결정할 수 있습니다. 이는 그 중 일부일 뿐입니다.사용자 nhtrader는 다음을 사용합니다..

listen_port=26   
pasv_max_port=7004
pasv_min_port=7000

동적 IP 주소를 사용하고 고정 IP 주소가 없는 경우 다음 항목을 사용하십시오.

pasv_addr_resolve=YES

고정 IP 주소를 사용하는 경우 다음 주소를 사용하십시오.

pasv_address=x.x.x.x

구성 파일을 저장하고 닫은 후 vsftpd서비스를 다시 시작하십시오.

 sudo systemctl restart vsftpd.service

이제 FTP 서버에 올바르게 연결할 수 있습니다. 다시 한번 말씀드리지만, 전체 내용을 보시는 것을 추천드립니다.포럼 게시물많은 정보와 가능한 질문을 다루고 있기 때문입니다.

2. 가능한 PHP 수정

사용자 Martin Prikryl에 따르면이 스택 오버플로 게시물, 서버 뒤로 이동하여 ftp_pav정확한 오류 메시지를 해결할 수 있습니다.ftp_loginphp module

$conn_id = ftp_connect('x.x.x.x');

ftp_login($conn_id, 'user', 'pass');

ftp_pasv($conn_id, true);

그는 상담을 통해 이 답을 찾았다PHP 문서. 모든 링크를 주의 깊게 읽고 이것이 귀하에게 적합한 수정인지 확인하십시오.

결론적으로

먼저, 귀하 vsftpd또는 다른 ftp서버가 올바르게 구성되었는지, 방화벽이 ftp연결을 허용하는지, 호스트에 연결할 수 있는지 확인하십시오. 이를 수행하는 모범 사례는 VPS 또는 라우터 설명서를 참조하십시오.

링크를 추가하겠습니다vsftpd 맨페이지또한 참고용입니다. 구성 파일의 각 항목이 수행하는 작업을 설명하는 페이지에 대한 링크가 있습니다.

이 답변에 대해 질문이나 문의사항이 있으면 댓글을 남겨주세요. 명령을 시도하기 전에 제가 제공하는 각 링크를 주의 깊게 읽어 보시기 바랍니다. 오해를 바로잡고 게시물을 개선할 수 있도록 피드백을 보내주셔서 감사합니다. 필요한 경우 답변을 업데이트할 수 있습니다.

행운을 빌어요!

관련 정보