我正在寫一個PHP頁面,它存儲FTP帳戶的地址,用戶名和密碼。驗證FTP憑證
我需要根據服務器驗證它們並告訴用戶所提供的憑據是否正常。
可以激發系統命令,系統命令更可取,因此可以編寫可重用的腳本。
那麼有人可以告訴我如何驗證bash上的ftp憑證嗎?我是CentOS。
我正在寫一個PHP頁面,它存儲FTP帳戶的地址,用戶名和密碼。驗證FTP憑證
我需要根據服務器驗證它們並告訴用戶所提供的憑據是否正常。
可以激發系統命令,系統命令更可取,因此可以編寫可重用的腳本。
那麼有人可以告訴我如何驗證bash上的ftp憑證嗎?我是CentOS。
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);
您可以使用此代碼
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();
}
您可以使用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);
<?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'));
?>
的函數。用它!不要爲這麼簡單的任務做系統調用。
「簡單」取決於設置。也許目標FTP服務器僅支持主動模式,或僅支持被動模式?也許本地服務器被防火牆,被動模式端口限制在一定範圍內,或者它只能通過FTP代理訪問其他系統?這樣的「簡單」任務隨後可以通過可以相應配置的命令行FTP客戶端來實現。 – Shi
@Shi **主動/被動模式與登錄測試有什麼關係?**這就是數據*(文件,列表)*傳輸。認真?瞭解FTP協議,瞭解連接如何工作以及文件傳輸如何工作,並且您將瞭解哪些事情可以被動...... #facepalm – CodeAngry
好的,您是對的。儘管如此,FTP代理部分仍然成立。因爲我們處於一種燃燒的心情;那麼屏蔽'ftp_connect()'和'ftp_login()'怎麼辦?由於返回代碼已正確檢查,因此不需要用警告填充PHP日誌。我只是略過「不要寫或提出無用的代碼來填充日誌,因爲處理過的警告!」這個全功能的功能不檢查可選的FTP擴展的存在。我猜不是那麼容易。 – Shi