2010-01-28 30 views
5

Về cơ bản khi tôi có nhiều hơn 25 tệp tải lên trong một biểu mẫu, mảng PHP $ _FILES được cắt thành 25 mục nhập đầu tiên (0-24), không chính xác. Nó sẽ có tất cả 31. Điều này chỉ xảy ra trên một máy chủ cụ thể. Apache với PHP. Tôi đã thử trên hai máy chủ khác và chúng dường như cho phép tất cả 31.

Điều này có thể do một số tùy chọn cấu hình trong Apache gây ra không? Hoặc là nó có nhiều khả năng một vấn đề cấu hình trong PHP?

Điều duy nhất tôi có thể nghĩ là có thể là chỉ thị apache LimitRequestFields, nhưng điều này sẽ ném một lỗi chứ không phải chỉ cần cắt nó thành 25 đầu tiên.

Tôi biết rằng có quá nhiều trường tệp trong một biểu mẫu là thực tiễn không tốt, tuy nhiên đây là điều cần thiết do chức năng được yêu cầu cho trang cụ thể này. Tôi không thể làm việc này.

Bất kỳ trợ giúp nào về vấn đề này sẽ được đánh giá cao.

HTML bên dưới minh họa sự cố tôi đang gặp phải.

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 

<body> 

<form enctype="multipart/form-data" action="test.php" method="post"> 
<input type="file" name="field_id_11[0][1]"/> 
<input type="file" name="field_id_11[1][1]"/> 
<input type="file" name="field_id_11[2][1]"/> 
<input type="file" name="field_id_11[3][1]"/> 
<input type="file" name="field_id_11[4][1]"/> 
<input type="file" name="field_id_11[5][1]"/> 

<input type="file" name="field_id_11[6][1]"/> 
<input type="file" name="field_id_11[7][1]"/> 
<input type="file" name="field_id_11[8][1]"/> 
<input type="file" name="field_id_11[9][1]"/> 
<input type="file" name="field_id_11[10][1]"/> 
<input type="file" name="field_id_11[11][1]"/> 
<input type="file" name="field_id_11[12][1]"/> 
<input type="file" name="field_id_11[13][1]"/> 
<input type="file" name="field_id_11[14][1]"/> 
<input type="file" name="field_id_11[15][1]"/> 
<input type="file" name="field_id_11[16][1]"/> 
<input type="file" name="field_id_11[17][1]"/> 
<input type="file" name="field_id_11[18][1]"/> 
<input type="file" name="field_id_11[19][1]"/> 
<input type="file" name="field_id_11[20][1]"/> 
<input type="file" name="field_id_11[21][1]"/> 
<input type="file" name="field_id_11[22][1]"/> 

<input type="file" name="field_id_11[23][1]"/> 
<input type="file" name="field_id_11[24][1]"/> 
<input type="file" name="field_id_11[25][1]"/> 
<input type="file" name="field_id_11[26][1]"/> 
<input type="file" name="field_id_11[27][1]"/> 
<input type="file" name="field_id_11[28][1]"/> 
<input type="file" name="field_id_11[29][1]"/> 
<input type="file" name="field_id_11[30][1]"/> 
<input type="text" name="blah" value="something"/> 
<input type="submit" /> 
</form> 

</body> 
</html> 

Trả lời

3

Đó là "25 tệp tối đa" và "chỉ xảy ra trên một máy chủ cụ thể" dường như chỉ ra một số biện pháp cấu hình/bảo mật trên máy chủ đó.

Và "25 tải lên tối đa" là cấu hình mặc định của suhosin PHP extension - xem chỉ thị cấu hình suhosin.upload.max_uploads.


phần mở rộng đó được cài đặt theo mặc định (vì lý do an ninh) trên một số bản phân phối Linux - Ubuntu cung cấp nó theo mặc định, ví dụ, nếu tôi nhớ chính xác; bạn có thể kiểm tra xem nó đã được cài đặt/bật chưa trong đầu ra của phpinfo().

+0

Cảm ơn bạn rất nhiều vì điều đó. Tôi không biết rằng thậm chí còn tồn tại. Tôi đã thêm: suhosin.upload.max_uploads = vào tệp php.ini của máy chủ và bây giờ máy chủ hoạt động hoàn hảo. Cảm ơn bạn lần nữa :) Cũng nhờ tất cả những người khác đã trả lời. Đây là lần đầu tiên tôi sử dụng trang này. – Chris

+0

Bạn được chào đón :-) ;; có phải là lần đầu tiên cho mọi thứ * (và câu hỏi của bạn được viết tốt, có một ví dụ về mã, các thẻ là OK và mọi thứ - điều này khá hay cho một câu hỏi đầu tiên!) * ;-) –

0

PHP đặt tệp đã tải lên vào một thư mục tạm thời. Vì vậy, bạn có thể xác nhận nếu vấn đề là với PHP hoặc với Apache bằng cách kiểm tra xem có thêm 6 tệp nằm trong thư mục tạm thời đó hay không.

Điều tôi sẽ làm là lấy vị trí của tệp đầu tiên và sau đó chạy vòng lặp để phản hồi tất cả các tệp trong thư mục đó. Nếu đó là 31, đó là PHP, nếu đó là 25, thì đó là Apache.

1

Kiểm tra phần Tải lên tệp của ini file directives.

Có cài đặt giới hạn max_file_uploads có sẵn từ PHP 5.2.12 mà bạn có thể muốn xem xét điều chỉnh nếu bạn đang sử dụng phiên bản đó hoặc cao hơn.

Đồng thời, upload_max_filesize là một tổng tối đa cho tất cả các file tải lên kết hợp, do đó, nó có thể là bạn có thể đạt đến giới hạn ở đó, mặc dù từ mô tả nó có vẻ nhiều khả năng rằng một giới hạn max_file_uploads là vấn đề.

0

Nếu xem cài đặt cấu hình Suhosin không hoạt động. Hãy thử kiểm tra các tùy chọn upload_max_filesizepost_max_size trong php.ini.

0

tại sao không sử dụng move_uploaded_file đó là công việc chỉ cần cố gắng và thêm đường dẫn trong mảng và thực hiện chức năng này nếu không làm việc? sao chép move_uploaded_file (số lượng tệp) điều này không tốt nhưng công việc của nó chỉ cần thử

$file1 = $_POST['file1']; 
$file2 = $_POST['file2']; 
$file3 = $_POST['file3']; 
$file4 = $_POST['file4']; 
$file5 = $_POST['file5']; 
$file6 = $_POST['file6']; 
$array = array($file1,$file2,$file3,$file4,$file5,$file6); 

if(isset($_POST['submit'])) 
{ 
    for($i=0;$i<count($array);$i++) 
    { 
    $dir = $array[$i]; 

    $uploaddir = "dirfiles/"; 
    $uploadfile = $uploaddir.$_FILES['file1']['name']; 
    move_uploaded_file($_FILES['file21']['tmp_name'],$uploadfile); 

    $uploaddir = "dirfiles/"; 
    $uploadfile = $uploaddir.$_FILES['file2']['name']; 
    move_uploaded_file($_FILES['file2']['tmp_name'],$uploadfile); 

      ????????????????????????????????????????????????????? 
      ????????????????????????????????????????????????????? 
Các vấn đề liên quan