0

サイトにアップロードを実装しようとしています。

ファイルがアップロードされたと表示されますが、アップロード フォルダを調べても何もありません。

これに似た他の投稿を読んだことがありますが、運が悪いです。

別の質問に対するこの回答を読みました:

Linux マシンでも同様の問題がありました。私のサーバーのPHP構成はcuplritであることが判明しました。PHP は SAFE MODE で実行されていました。Uploadify スクリプトを FTP 経由でアップロードしたため、スクリプト ファイルは FTP ユーザーの詳細と共にファイル システムに保存されました。PHP の一時フォルダーはサーバー ルートが所有していたため、UID の不一致がありました。つまり、一時アップロード ファイルはルートに属していましたが、それを移動しようとしたアップロード スクリプトは FTP ユーザーが所有していました。それはそれを粉砕しました。

これを解決するために、uploadify php スクリプトの所有権をルートに変更し、そこから機能しました。

私はフロントエンドの方なので、サーバー側のコーディングについてはほとんど知りません。権限を変更するにはどうすればよいですか? 1&1 ホスティングを使用しています。

FileZilla のサーバー上のファイルのスクリーンショットを次に示します。

FileZilla スクリーンショット

編集

ZIP ファイルをアップロードしようとしましたが、アップロードは成功したと表示されましたが、アップロードされませんでした。ただし、PHP スクリプトの次の行のために、ZIP ファイルのアップロードを許可されるべきではなかったため、スクリプトにエラーがあるのではないかと思います。

// Validate the file type
$fileTypes = array('jpg','jpeg','gif','png'); // File extensions

スクリプトは zip ファイルを拒否すべきではありませんか?

以下は、サーバーではなくスクリプトにエラーがある場合に使用しているコードです。

JS

$(function() {
    $('#file_upload').uploadify({
        'swf'      : 'uploadify.swf',
        'uploader' : 'uploadify.php',
        'onUploadSuccess' : function(file, data, response) {
            alert('The file ' + file.name + ' was successfully uploaded with a response of ' + response + ':' + data);
        } 
    });
});

PHP

<?php

 $targetFolder = '/uploads/'; // Relative to the root

 $verifyToken = md5('unique_salt' . $_POST['timestamp']);

 if (!empty($_FILES) && $_POST['token'] == $verifyToken) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
$targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name'];

// Validate the file type
$fileTypes = array('jpg','jpeg','gif','png'); // File extensions
$fileParts = pathinfo($_FILES['Filedata']['name']);

if (in_array($fileParts['extension'],$fileTypes)) {
    move_uploaded_file($tempFile,$targetFile);
    echo '1';
} else {
    echo 'Invalid file type.';
}
}
?>
4

2 に答える 2

2

トークン検証コードに問題があるようです。その機能を削除すると、アップロードが完了するはずです:)

if()コメントアウトしてその比較を削除できますか?

if (!empty($_FILES) && $_POST['token'] == $verifyToken) {行は次のように変更されます。

if (!empty($_FILES) /* && $_POST['token'] == $verifyToken */) {

于 2013-11-11T14:56:39.473 に答える
0

私の Linux PHP インストールでは、 $fileTypes の大文字と小文字が区別されるようです。「image.jpg」はアップロードできますが、「image.JPG」はアップロードできません。

変化する

$fileTypes = array('jpg','jpeg','gif','png');

$fileTypes = array('jpg','JPG','jpeg','JPEG','gif','GIF','png','PNG');
于 2014-01-28T15:37:31.853 に答える