-1

ファイルをアップロードするための関数要素を入れようとすると、いくつかの問題が発生しました。

入力タイプのファイルを含むフォームがありますが、保存しようとしても機能しません。

すべて記録して保存し、メッセージを返す関数を作成しましたが、アップロード ファイルを除いてすべて正常に動作します。

以下は私の機能です

/**
 * Enregistrement d'un nouvel athlète
 * @param type $nom
 * @param type $prenom
 * @param type $date_naissance
 * @param type $localisation
 * @param type $taille
 * @param type $poids
 * @param type $actif
 * @param type $biographie
 * @param type $url_photo
 * @return string|null
 */
function recordNewAthlete($nom, $prenom, $date_naissance, $localisation, $taille, $poids, $actif, $biographie, $fileuplouad) {
    $input_nom = mysql_real_escape_string($nom);
    $input_prenom = mysql_real_escape_string($prenom);
    $input_date = date('Y-m-d', strtotime(mysql_real_escape_string($date_naissance)));
    $input_localisation = mysql_real_escape_string($localisation);
    $input_taille = mysql_real_escape_string($taille);
    $input_poids = mysql_real_escape_string($poids);
    $input_actif = mysql_real_escape_string($actif);
    $input_biographie = ($biographie);
    if (isset($input_nom) && !empty($input_nom)) {
        if ($_FILES['$fileuplouad']['error']) {
            switch ($_FILES['$fileuplouad']['error']) {
                case 1: // UPLOAD_ERR_INI_SIZE     
                    echo"Le fichier dépasse la limite autorisée par le serveur (fichier php.ini) !";
                    break;
                case 2: // UPLOAD_ERR_FORM_SIZE     
                    echo "Le fichier dépasse la limite autorisée dans le formulaire HTML !";
                    break;
                case 3: // UPLOAD_ERR_PARTIAL     
                    echo "L'envoi du fichier a été interrompu pendant le transfert !";
                    break;
                case 4: // UPLOAD_ERR_NO_FILE     
                    echo "Le fichier que vous avez envoyé a une taille nulle !";
                    break;
            }
        } else {
            // $_FILES['url_photo1']['error'] vaut 0 soit UPLOAD_ERR_OK     
            // ce qui signifie qu'il n'y a eu aucune erreur    
            $_FILES['$fileuplouad']['name'] = mktime() . $_FILES['$fileuplouad']['name'];
            $url1 = $_FILES['$fileuplouad']['name'];
            $chemin_destination = 'web/teamfrancestron/www/admin/uploads/';
            move_uploaded_file($_FILES['$fileuplouad']['tmp_name'], $chemin_destination . $_FILES['$fileuplouad']['name']);
            $tartget_path = $chemin_destination . $_FILES['$fileuplouad']['name'];
            $query = "INSERT INTO `stg_man_athletes` SET
                    `nom` = '{$input_nom}', 
                    `prenom` = '{$input_prenom}', 
                    `date_naissance` = '{$input_date}', 
                    `localisation` = '{$input_localisation}', 
                    `taille` = '{$input_taille}', 
                    `poids` = '{$input_poids}', 
                    `etat_activite` = '{$input_actif}', 
                    `description` = '{$input_biographie}', 
                    `url_photo` = '{$target_path}'";
            mysql_query($query);
            if (mysql_affected_rows() >= 0) {
                return "<div class='success'>Enregistrement de l'Athlète terminé, vous pouvez continuer vos actions.</div>"
                ;
            } else {
                return "<div class='error'>Erreur fatale lors de l'enregistrement, veuillez réessayer ulterieurement.</div>";
            }
        }
    } else {
        return null;
    }
}

問題は、定義されたパスにあるファイルを移動しないことです。

私は自分の関数をそのように呼び出します

$message_enregistr_athlete = recordNewAthlete($_POST['nom'], $_POST['prenom'], $_POST['date_naissance'], $_POST['localisation'], $_POST['taille'], $_POST['poids'], $_POST['etat_activite'], $_POST['description'], 'userfile');

アップロードが問題ないかどうかを確認したい結果をエコーし​​ます。SQLクエリは問題ありません。すべてのフィールドが正常に機能します。

どんな種類の助けも大歓迎です

4

1 に答える 1

1
  1. error_repoting をすべての ie,error_repoting(1);に作成し、エラーが発生しているかどうかを確認します。
  2. ファイルが大きすぎる場合は、以下を試してください。

最大アップロード サイズを制御する 2 つの PHP 構成オプション:upload_max_filesizepost_max_size. どちらも、たとえば、10 メガバイトのファイル サイズの場合は「10M」に設定できます。

ただし、アップロードが完了するまでの時間も考慮する必要があります。通常、PHP スクリプトは 30 秒後にタイムアウトしますが、正常なブロードバンド接続で 10MB のファイルをアップロードするには、少なくとも 3 分かかります (アップロード速度は通常、ダウンロード速度よりも 5 倍遅いことに注意してください)。さらに、アップロードされた画像を操作または保存すると、スクリプトのタイムアウトが発生する場合もあります。したがって、PHP の max_input_time と max_execution_time を 300 (秒単位で指定された 5 分) のような値に設定する必要があります。

.htaccess に次のコードを追加します。

php_value upload_max_filesize 10M
php_value post_max_size 10M
php_value max_input_time 300
php_value max_execution_time 300

または、php ページ自体で設定を行うこともできます。ini_set

ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_input_time', 300);
ini_set('max_execution_time', 300);

参照: http://www.sitepoint.com/upload-large-files-in-php/

于 2013-03-21T04:36:44.907 に答える