2012-05-21 51 views
6

Mục tiêu của tôi ở đây là tải lên tệp .txt trên một biểu mẫu (duyệt), đăng tệp lên một trang php khác và sau đó đọc tệp đó theo từng dòng.Làm cách nào để tải lên tệp .txt trong PHP và đọc từng dòng trên một trang khác?

Mã của tôi cho đến thời điểm này. FILE 1: HTML UPLOAD:

<form action="TestParse.php" method="post" enctype="multipart/form-data"> 
    <label for="file">Filename:</label> <input type="file" name="file" id="file"/> 
<input type="submit" value="Submit"> 
</form> 

FILE 2: đọc các tập tin

if ($_FILES["file"]["error"] > 0) 
{ 
echo "Error: " . $_FILES["file"]["error"] . "<br />"; 
} 
elseif ($_FILES["file"]["type"] !== "text/plain") 
{ 
echo "File must be a .txt"; 
} 
else 
{ 
$file_handle = fopen($_FILES["file"]["name"], "rb"); 
} 

Như tôi đã nhìn thấy nó, tập tin thứ hai sẽ xác minh rằng không có lỗi và rằng tập tin tải lên là a. txt. Sau đó nó sẽ fopen() tập tin và sau đó tôi sẽ có thể đọc với fgets() (Tôi đã quản lý để có được tất cả điều này để làm việc).

Tuy nhiên, mã này chỉ hoạt động nếu tệp .txt đang được tải lên xảy ra trong cùng thư mục với tệp PHP. Nếu không, tôi nhận được rất nhiều thông báo lỗi. Và khi bạn không thể tải lên một tệp không có trong thư mục của tệp PHP, nó sẽ đánh bại mục đích của việc có hệ thống tải tệp lên ở vị trí đầu tiên.

Ai đó có thể cho tôi biết điều gì sai với mã này?

+0

Bạn không bao gồm mã lưu tệp; đó là cố ý hay giám sát? – sarnold

+0

'fopen ($ _ FILES [" tệp "] [" tên "]," rb ");' - dòng này khiến tôi nghĩ rằng anh ấy không lưu tệp. Bạn không thể mở '['name']' - chỉ mục đó giữ tên tệp gốc đã được tải lên. –

Trả lời

2

Bạn cần di chuyển tệp đến nơi bạn muốn nó đi trước tiên thì bạn có thể làm việc với nó. Xem move_uploaded_file() để biết cách thực hiện. Xem thêm, Handling File Uploads trong tài liệu PHP đặc biệt là the page showing how to do with using POST mà bạn đang làm.

<?php 
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead 
// of $_FILES. 

$uploaddir = '/var/www/uploads/'; 
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 

echo '<pre>'; 
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { 
    echo "File is valid, and was successfully uploaded.\n"; 
} else { 
    echo "Possible file upload attack!\n"; 
} 

echo 'Here is some more debugging info:'; 
print_r($_FILES); 

print "</pre>"; 

?> 
+0

Nói đúng, bạn không * có * để di chuyển nó trước.Nếu bạn chỉ cần truy cập nó một lần, bạn có thể tương tác với tệp tạm thời tốt. –

2

Sử dụng $_FILES["file"]["tmp_name"] thay thế. Và lấy nội dung của tệp bằng

$contents = file_get_contents($_FILES['file']['tmp_name']); 
14

để đọc từng dòng, nó làm việc cho tôi mã này:

$fp = fopen($_FILES['uploadFile']['tmp_name'], 'rb'); 
    while (($line = fgets($fp)) !== false) { 
     echo "$line<br>"; 
    } 

bạn không cần phải lưu nó.

0

Bạn có thể đọc toàn bộ tệp văn bản thành một mảng với php explode fn.

eg. $wholeTextFile = explode("\n", file_get_contents('textFileName.txt')); 

Sau đó nhận tổng số dòng bằng cách tính sizeOf mảng.

eg. $totalLinesinFile = sizeOf($wholeTextFile); 

Bây giờ khi bạn lặp mảng trong một vòng lặp hoặc forforEach vòng lặp, mỗi lần lặp mang đến cho bạn 1 dòng.

eg. 

for ($i = 0; $i < $totalLinesinFile ; $i++) { 
    echo "Line number is ".$i."<br>"; 
    echo wholeTextFile[$i]."<hr>"; 
} 
Các vấn đề liên quan