我正在尝试创建一个简单的脚本,使用ftp将文件上传到服务器。我的设置包含3个文件。 index.php是接口,config.php包含一些默认配置值,transfer.php包含各种功能。使用require_once将配置和传输添加到index.php。
在索引文件中,我有一个简单的表单,它读取一些值(ftp主机,用户名,密码等),同时在该页面上显示它们。然后,当用户单击链接时,使用以下代码调用php函数:
if (isset($_GET['transfer1'])) {
ftp_upload($server, $ftp_user_name, $ftp_user_pass, $dest, $destinationfile, $rem_path, $path, $unzipper, 'files');
(!ftp_upload ? (list($result,$error) = array('File Transfer failed','1')) : $result = "File transfer completed successfully");
}
transfer.php中的函数如下所示:
function ftp_upload($ftpserver, $user, $pass, $dest, $destinationfile, $rem_path, $path, $unzipper, $stage) {
$numargs = func_num_args();
echo "Number of arguments: $numargs<br />\n";
$arg_list = func_get_args();
for ($i = 0; $i < $numargs; $i++) {
echo "Argument $i is: " . $arg_list[$i] . "<br />\n";
}
$conn = @ftp_connect($ftpserver) or die ("Cannot connect to $ftpserver");
$login = @ftp_login($conn, $user, $pass) or die ("Cannot login as $user - $pass<br />");
if($stage == 'files') {
$upload = ftp_put($conn, $dest, $destinationfile, FTP_BINARY);
(!$upload ? false : true);
} elseif($stage == 'unzip') {
$upload = ftp_put($conn, $rem_path.$unzipper, $path.$unzipper, FTP_ASCII);
(!$upload ? false : true);
} elseif ($stage == 'sql') {
$upload = ftp_put($conn, $rem_path.'/backup.sql', $_SERVER["DOCUMENT_ROOT"] . '/backup.sql', FTP_BINARY);
(!$upload ? false : true);
}
ftp_close($conn);
}
如您所见,有关传输(用户/传递等)的值应传递给该函数。问题在于虽然它们出现(func_get_args()的功能),但它们不起作用。例如,如果我使用表单更改ftp主机名,则主页面会正确显示它,但传递的值是config.php文件的默认值。 理论上,此文件允许使用类似于以下内容的值来覆盖值:
(isset($_POST['server-host']) && $_POST['server-host'] != '' ? $server = $_POST['server-host'] : $server = "test.com");
但是,以上所有内容根本不起作用。就主要的index.php文件而言,所有值都会更新,并且应该传递给函数,但它们不会。
也许有人可以指出我的错误或至少指出我正确的方向???
谢谢!
P.S:为了更好地了解我要做的事情:我有一个包含2个文件的index.php文件。其中一个(config.php)具有可以被$ _POST数据覆盖的默认值(参见上面的isset()语句)。另一个是transfer.php,它处理ftp上传的东西。如果我硬编码所需的值,该函数可以正常工作,但是当我使用第一个if语句检查$ _GET时,传递给函数的变量不是更新的变量,而是默认值...