เหตุใด SFTP ผ่าน PHP จึงล้มเหลว แต่ประสบความสำเร็จใน FileZilla บนเครื่อง Windows 8.1 ของฉัน

ใน PHP ฉันไม่สามารถเชื่อมต่อ SFTP ทำงานได้ ฉันได้ลองใช้ฟังก์ชัน SFTP ดั้งเดิม (ssh_connect) แล้ว แต่ไม่สามารถเชื่อมต่อได้ ฉันได้ลองใช้ phpseclib แล้ว แต่ก็ล้มเหลวเช่นกัน ความพยายามข้างต้นของฉันไม่ได้ให้ข้อมูลบันทึกมากนัก

รหัสพื้นเมือง:

if (!function_exists('ssh2_connect')) { 
    echo "dll not loaded properly"; //never see this, so I know it works
    return false;
}
$connection = ssh2_connect('sftp.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
$sftp = ssh2_sftp($connection);

รหัสไลบรารี phpseclib:

include('Net/SFTP.php');

$sftp = new Net_SFTP('sftp.example.com');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

ฉันได้พยายามติดตามธุรกรรมทั้งหมดผ่าน Fiddler เพื่อดูว่าอย่างน้อยฉันเห็นการเชื่อมต่อที่กำลังทำอยู่หรือไม่ และฉันเห็นข้อผิดพลาดในเบราว์เซอร์ (ด้านล่าง) ที่จาก googling อาจหมายถึงว่ามีการเชื่อมต่อเกิดขึ้นกับเซิร์ฟเวอร์ แต่ไม่มีการตอบสนอง

[Fiddler] ReadResponse() failed: The server did not return a complete response for this request. Server returned 17139 bytes. 

เหตุใดฉันจึงสามารถเชื่อมต่อกับ URL ด้วยชื่อผู้ใช้และรหัสผ่านผ่าน FIleZilla แต่ไม่สามารถเชื่อมต่อจากภายใน php ได้ ฉันจำเป็นต้องมี DLL อื่นๆ ในโฟลเดอร์ /ext ของ PHP หรือไม่ (เช่น php_openssl.dll ฯลฯ)

ขอบคุณฌอน


person Sean Charles    schedule 12.07.2015    source แหล่งที่มา
comment
ฉันใช้ phpseclib สำหรับการดีบัก: เพิ่ม print_r($sftp->getSFTPErrors()); ก่อนออก   -  person    schedule 12.07.2015
comment
ฉันไม่ได้ลอง getSFTPErrors() แต่ฉันพยายามแสดง $sftp-›getLog() ฉันลองใช้ getSFTPErrors() แล้ว และเหมือนกับ getLog() ไม่มีการส่งคืนอะไรเลย   -  person Sean Charles    schedule 12.07.2015
comment
มีการตรวจสอบข้อผิดพลาดอย่างเต็มรูปแบบอยู่หรือไม่   -  person    schedule 12.07.2015
comment
คำถามที่ดี. ฉันไม่แน่ใจ. ที่ด้านบนของฟังก์ชัน ฉันมีสิ่งนี้:กำหนด('NET_SFTP_LOGGING', NET_SFTP_LOG_COMPLEX); // NET_SFTP_LOG_COMPLEX หรือ NET_SFTP_LOG_SIMPLE   -  person Sean Charles    schedule 12.07.2015
comment
ฉันคิดว่าเป็นไปตาม: ini_set('display_errors', 'On'); ini_set('html_errors', 0); error_reporting(-1);   -  person    schedule 12.07.2015
comment
ขอบคุณ @Dagon. อย่างน้อยฉันก็ได้รับข้อความแสดงข้อผิดพลาดตอนนี้ แม้ว่าฉันจะไม่แน่ใจว่าจะแก้ไขได้อย่างไร ข้อผิดพลาด PHP ที่ไม่คาดคิด [ไม่พบเซิร์ฟเวอร์ที่เข้ากันได้กับอัลกอริธึมการเข้ารหัสไคลเอนต์] ความรุนแรง [1024] ใน [C:\dev\php\workspace\phpseclib\Net\SSH2.php บรรทัด 1266] แนวคิดใด ๆ เกี่ยวกับวิธีการ เปิดใช้งานอัลกอริธึมการเข้ารหัสที่เหมาะสมหรือไม่   -  person Sean Charles    schedule 14.07.2015
comment
ฉันเชื่อว่านั่นหมายความว่าไฟล์ไม่ได้รวมไว้อย่างถูกต้อง   -  person    schedule 14.07.2015
comment
ใช่แล้ว นั่นคือสิ่งที่การวิจัย Google ของฉันพบเช่นกัน มีรายงานว่าไฟล์ /Crypt/RC4.php ไม่ได้รวมไว้อย่างถูกต้อง แต่ฉันได้รวมไว้แล้ว และฉันประสบปัญหาเดียวกัน ฉันจะขุดต่อไปและดูว่าฉันไม่สามารถกลับมาแก้ไขให้คนรุ่นต่อ ๆ ไปได้หรือไม่   -  person Sean Charles    schedule 14.07.2015
comment
@Dagon ฉันใช้ PHP เวอร์ชัน 5.3.3 และจากสิ่งที่ฉันบอกได้เกี่ยวกับเอกสารของ phpseclib ฉันควรใช้ไลบรารีตามที่เป็นอยู่ ดังนั้นฉันจึงรวมไฟล์ไลบรารีบางไฟล์ไว้ที่ด้านบน เช่น: require_once($GLOBALS['codedir'] . /phpseclib/Crypt/RC4.php); ฉันควรรวมไฟล์เหล่านี้ด้วยหรือไม่ อย่างอื่นเหรอ?   -  person Sean Charles    schedule 14.07.2015
comment
ลองเพิ่ม set_include_pat ก่อนรวม ของฉัน: set_include_path(get_include_path() . PATH_SEPARATOR . '/var/virtual/customers/XXX/html/update/phpseclib'); include ('/var/virtual/customers/XXX/html/update/phpseclib/Net/SFTP.php');   -  person    schedule 14.07.2015
comment
เยี่ยมมาก ฉันสามารถเชื่อมต่อแล้วอัปโหลดไฟล์ได้ ฉันไม่แน่ใจว่าจะให้เครดิตสำหรับคำตอบรวมของคุณได้อย่างไร (แจ้งให้เราทราบหากมีวิธี) แต่ขอบคุณสำหรับความช่วยเหลือทั้งหมด!!   -  person Sean Charles    schedule 14.07.2015
comment
ดีใจที่ได้ผล แค่โชคดีที่ฉันใช้ไลบรารีนั้นสำหรับโปรเจ็กต์ - คุณสามารถเขียนคำตอบ (แม้จะสั้น ๆ ก็ตาม) สำหรับใครก็ตามที่ค้นหา   -  person    schedule 14.07.2015
comment
@Dagon ฉันประสบปัญหาเดียวกันนี้ แต่การตั้งค่าเส้นทางของไฟล์รวมนั้นใช้ไม่ได้สำหรับฉัน ดังนั้นคุณช่วยแนะนำฉันหน่อยได้ไหม?   -  person Anandharaman Buvaneswaran    schedule 31.12.2016