2014-03-04 173 views
0

我正在寫一個PHP頁面,它存儲FTP帳戶的地址,用戶名和密碼。驗證FTP憑證

我需要根據服務器驗證它們並告訴用戶所提供的憑據是否正常。

可以激發系統命令,系統命令更可取,因此可以編寫可重用的腳本。

那麼有人可以告訴我如何驗證bash上的ftp憑證嗎?我是CentOS。

回答

0

PHP有一個FTP Module你可以用它來驗證憑據

基本例如從docs

<?php 
// set up basic connection 
$conn_id = ftp_connect($ftp_server); 

// login with username and password 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

// check connection 
if ((!$conn_id) || (!$login_result)) { 
    echo "FTP connection has failed!"; 
    echo "Attempted to connect to $ftp_server for user $ftp_user_name"; 
    exit; 
} else { 
    echo "Connected to $ftp_server, for user $ftp_user_name"; 
} 

// upload the file 
$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY); 

// check upload status 
if (!$upload) { 
    echo "FTP upload has failed!"; 
} else { 
    echo "Uploaded $source_file to $ftp_server as $destination_file"; 
} 

// close the FTP stream 
ftp_close($conn_id); 
?> 

當然,如果你真的想FTP通過EXEC()或東西在命令行上,有資源如these docs這將有所幫助。

工作示例我只是想:

文件:ftp.sh

#! /bin/bash 

[email protected] 
PASS=xxxxxxxxxxxx 

ftp -inv domain.com <<EOF 
user $USER $PASS 

ls -l 

文件:index.php文件

$result = shell_exec('sh ftp.sh'); 
var_dump($result); 
0

您可以使用此代碼

try { 
     $con = ftp_connect($server); 
     if (false === $con) { 
      throw new Exception('Unable to connect'); 
     } 

     $loggedIn = ftp_login($con, $username, $password); 
     if (true === $loggedIn) { 
      echo 'Success!'; 
     } else { 
      throw new Exception('Unable to log in'); 
     } 

     print_r(ftp_nlist($con, ".")); 
     ftp_close($con); 
    } catch (Exception $e) { 
     echo "Failure: " . $e->getMessage(); 
    } 
1

您可以使用ftp_connect()ftp_login()

<?php 

$conn = ftp_connect($ftp_server); 
$result = ftp_login($conn, $ftp_user_name, $ftp_user_pass); 

if ((!$conn) || (!result)) { 
    echo "Failed"; 
} else { 
    echo "Success"; 
} 

ftp_close($conn); 
1
<?php 
function testFtpCredentials($server, $username, $password){ 
    if(!is_string($server) or !strlen($server = trim($server))){ 
     return null; 
    } 
    if(!is_string($username) or !strlen($username = trim($username))){ 
     return null; 
    } 
    if(!is_string($password) or !strlen($password = trim($password))){ 
     return null; 
    } 
    if(!$connection = ftp_connect($server)){ 
     return false; 
    } 
    $result = ftp_login($connection, $username, $password); 
    ftp_close($connection); 
    return (bool)$result; 
} 

// How to use it. 
var_dump(testFtpCredentials('ftp.server', 'username', 'password')); 
?> 

的函數。用它!不要爲這麼簡單的任務做系統調用。

+0

「簡單」取決於設置。也許目標FTP服務器僅支持主動模式,或僅支持被動模式?也許本地服務器被防火牆,被動模式端口限制在一定範圍內,或者它只能通過FTP代理訪問其他系統?這樣的「簡單」任務隨後可以通過可以相應配置的命令行FTP客戶端來實現。 – Shi

+0

@Shi **主動/被動模式與登錄測試有什麼關係?**這就是數據*(文件,列表)*傳輸。認真?瞭解FTP協議,瞭解連接如何工作以及文件傳輸如何工作,並且您將瞭解哪些事情可以被動...... #facepalm – CodeAngry

+0

好的,您是對的。儘管如此,FTP代理部分仍然成立。因爲我們處於一種燃燒的心情;那麼屏蔽'ftp_connect()'和'ftp_login()'怎麼辦?由於返回代碼已正確檢查,因此不需要用警告填充PHP日誌。我只是略過「不要寫或提出無用的代碼來填充日誌,因爲處理過的警告!」這個全功能的功能不檢查可選的FTP擴展的存在。我猜不是那麼容易。 – Shi