0

HTML フォームを介して .PDF および .ZIP ファイルをアップロードし、それを PHP スクリプトに渡します。そこで、ファイルは一時フォルダーから移動され、指定されたフォルダーに配置されます。現在、これは 2 MB 未満のファイルでうまく機能します。それを超えると、次のエラー メッセージが表示されます。

Warning: copy() [function.copy]: Filename cannot be empty

ファイル名は空ではなく、コードはサイズが 2 MB 未満のファイルに対して正常に機能します。

/etc/ フォルダー (centos6.4 を実行している) にある php.ini ファイルを確認し、その構成で私が持っている

 upload_max_filesize = 50M

これはまだ PHP 構成の問題であり、2 MB を超えるファイルでエラーが発生していると考えています。他に確認する必要のある構成はありますか?

<?php
session_start();
$ref = $_POST['doc_ref'];
$rev = $_POST['doc_rev'];
$owner = $_POST['doc_owner'];
$contract = $_POST['contract'];
$cat = $_POST['cat'];
$type = $_POST['type'];
$pdf = $_FILES['pdf'];
$zip = $_FILES['zip'];
$pdf_name = $_FILES['pdf']['name'];
$content = $_POST['doc_content'];
$userid = $_SESSION['users_id'];
date_default_timezone_set('UTC');
$date = date_create();

// get the pdf from the form then remove the extension
$title = $_FILES["pdf"]["name"];
$title = pathinfo($title,PATHINFO_FILENAME);


$sth = "SELECT * FROM `contracts` WHERE `contracts_id`='$contract'";
$result = $conn->query($sth);   
while($row = $result->fetch(PDO::FETCH_ASSOC))
{
    $contract_name = $row['contracts_name'];
    $contract_prefix = $row['prefix'];
}

if ($contract_prefix)
{
    if ($type === '1')
    {
    $zippath = "zips/" . $contract_prefix . "/" . $contract_name . "/Forms/";
    $arcpath = "arc/" . $contract_prefix . "/" . $contract_name . "/Forms/";
    $pdfpath = "pdfs/" . $contract_prefix . "/" . $contract_name . "/Forms/";
    }elseif ($type === '2')
    {
    $zippath = "zips/" . $contract_prefix . "/" . $contract_name . "/Work Instructions And Process Flows/";
    $arcpath = "arc/" . $contract_prefix . "/" . $contract_name . "/Work Instructions And Process Flows/";
    $pdfpath = "pdfs/" . $contract_prefix . "/" . $contract_name . "/Work Instructions And Process Flows/";
    }
}else
{
    if ($type === '1')
    {
    $zippath = "zips/" . $contract_name . "/Forms/";
    $arcpath = "arc/" . $contract_name . "/Forms/";
    $pdfpath = "pdfs/" . $contract_name . "/Forms/";
    }elseif ($type === '2')
    {
    $zippath = "zips/" . $contract_name . "/Work Instructions And Process Flows/";
    $arcpath = "arc/" . $contract_name . "/Work Instructions And Process Flows/";
    $pdfpath = "pdfs/" . $contract_name . "/Work Instructions And Process Flows/";
    }
}

$pdfpath = $pdfpath . $_FILES["pdf"]["name"];
$zippath = $zippath . $_FILES["zip"]["name"];
// create archpath to store for later use
$arcpathfinal = $arcpath;
// append the current revision to the start of the zip files name for the arc
$arcpath = $arcpath . "Revision " . $rev . " - " . $_FILES["zip"]["name"];

//check the uploaded file is in PDF format and then move to correct directory
$allowed =  array('pdf');
$pdf = $_FILES['pdf']['name'];
$ext = pathinfo($pdf, PATHINFO_EXTENSION);
if(!in_array($ext,$allowed) ) {
    echo 'The file type must be a PDF!';
}else
{
    // move zip and pdf into correct folders
    move_uploaded_file($_FILES["pdf"]["tmp_name"], $pdfpath);
    move_uploaded_file($_FILES["zip"]["tmp_name"], $zippath);
}

// make a copy of zip file into arc folder
copy($zippath, $arcpath);

//INSERTING INTO DATABASE CODE HERE

アップデート

ファイルサイズが 2MB を超えると $_FILES 配列が空のように見えます.2MB 未満の場合、配列は名前、タイプ、tmp_name、エラー、サイズを期待どおりに返します。

2MB を超えるファイルで $_FILES が空である理由は何でしょうか。はい、upload_max_filesize はファイル サイズより高く設定されており、post_max_size は upload_max_filesize より高く設定されています。はい、php.ini ファイルに変更を加えた後、Apache を再起動しました。

4

1 に答える 1