0

PHPを使用してFTPファイルアップローダーを終了するのに問題があります。http://php.net/manual/en/ftp.examples-basic.phpにあるphp.netの例を使用しており、コードを少し変更しています。

<?php
//Start session();
session_start();

// Checking the users logged in
require_once('config.php');

//Connect to mysql server
    $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
    if(!$link) {
        die('Failed to connect to server: ' . mysql_error());
    }

    //Select database
    $db = mysql_select_db(DB_DATABASE);
    if(!$db) {
        die("Unable to select database");
    }

$ftp_server="*";

$ftp_user_name="*";

$ftp_user_pass="*";

$paths="members/userUploads";

$name=$_FILES['userfile']['name'];

$source_file=$_FILES['userfile']['tmp_name'];

// 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, $paths.'/'.$name, $source_file, FTP_BINARY); 

// check upload status
if (!$upload) { 
    echo "FTP upload has failed!";
} else {
    $CurrentUser = $_SESSION['CurrentUser'];
    $qry = "SELECT * FROM members WHERE username='$CurrentUser'";
    $result = mysql_query($qry);
    $result = mysql_fetch_array($result);
    $CurrentUser = $result[memberID];
    $qry = "INSERT into uploads (UploadPath, UploadUser) VALUES('$file_name', '$CurrentUser')";
    echo "Uploaded $source_file to $ftp_server as $paths.'/'.$name";
}

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

?>

ただし、コードは一部のファイルでは機能しますが、他のファイルでは機能しません。それが機能しない場合、エラーが発生します。

警告:ftp_put()[function.ftp-put]:48行目の...でファイル名を空にすることはできません。

4

3 に答える 3

1

ファイルのname送信時にエラーが発生した場合は、が設定されない可能性があります。members/userUploads/これにより、にアップロードしようとしftp_upload、空のファイル名について正しく文句を言うことになります。

エラーの一般的な理由は、許可されている最大ファイルサイズを超えていることです。少なくとも、FTPアップロードを試行する前に、ファイルerrorのエントリを確認してください。$_FILES

if ($_FILES['userfile']['error'] != UPLOAD_ERR_OK) {
   // handle the error instead of uploading, e.g. give a message to the user
}

考えられるエラーコードの説明は 、PHPのマニュアルに記載されています。

于 2012-10-11T13:37:19.207 に答える
0

これは、$nameまたは$source_fileが空白であることが原因である可能性があります。ファイルのアップロードが失敗し、問題が発生している可能性があります。ifを使用して、次のようなファイルがアップロードされたことを確認できます。

if (empty($name)) {
    die('Please upload a file');
}

次のような文字列で変数を使用している場合を除き、注意してください。

echo "Connected to $ftp_server, for user $ftp_user_name";

一重引用符を使用することをお勧めします。技術的には、変数の文字列をスキャンしないため、二重引用符よりも高速です。それに、見た目もすっきりしていると思います!:)

于 2012-10-11T13:38:48.980 に答える
0

48行目を変更する必要があります。二重引用符と。'/'の削除に注意してください。アップロードしようとしているファイルの名前によっては、その名前の一部をエスケープしている可能性があります。

$upload = ftp_put($conn_id, "$paths/$name", $source_file, FTP_BINARY); 
于 2013-11-01T22:44:27.670 に答える