2012-05-21 5 views
6

Moim celem jest przesłanie pliku .txt do formularza (przeglądania), opublikowanie pliku na innej stronie php, a następnie odczytanie tego pliku wiersz po wierszu.W jaki sposób można przesłać plik .txt w PHP i czytać wiersz po linii na innej stronie?

Mój kod do tej pory jest tutaj. PLIK 1: HTML Dodano:

<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> 

PLIK 2: czytania pliku

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"); 
} 

Jak ja to widzę, drugi plik by sprawdzić, czy nie ma błędu i że przesłany plik jest. tekst. Następnie fopen() plik, a ja będę w stanie czytać z fgets() (udało mi się to wszystko do pracy).

Jednak ten kod działa tylko wtedy, gdy przesyłany plik .txt znajduje się w tym samym katalogu, co plik PHP. W przeciwnym razie otrzymuję wiele komunikatów o błędach. A kiedy nie możesz załadować pliku, który nie znajduje się w folderze pliku PHP, to w pierwszej kolejności nie ma celu, by mieć system przesyłania plików.

Czy ktoś może mi powiedzieć, co jest nie tak z tym kodem?

+0

Nie podano kodu, który zapisuje plik; czy to było celowe czy niedopatrzenie? – sarnold

+0

'fopen ($ _ PLIKI [" plik "] [" nazwa "]," rb ");' - ta linia sprawia, że ​​myślę, że nie zapisuje pliku. Nie można otworzyć '['name']' - ten indeks zawiera oryginalną nazwę pliku, który został załadowany. –

Odpowiedz

2

Musisz przenieść plik tam, gdzie chcesz go najpierw , a następnie możesz z nim pracować. Zobacz, jak to zrobić: move_uploaded_file(). Zobacz także, Handling File Uploads w dokumentach PHP szczególnie the page showing how to do with using POST, które robisz.

<?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

Ściśle mówiąc, nie musisz * mieć *, aby przenieść go jako pierwszy.Jeśli potrzebujesz tylko raz, uzyskasz dostęp do pliku tymczasowego. –

2

Zamiast tego należy użyć $_FILES["file"]["tmp_name"]. I uzyskać zawartość pliku z

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

czytać wiersz po wierszu, pracował dla mnie ten kod:

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

nie trzeba go zapisać.

0

Możesz przeczytać cały plik tekstowy w tablicy z php explode fn.

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

Następnie uzyskaj łączną liczbę linii licząc tablicę sizeOf.

eg. $totalLinesinFile = sizeOf($wholeTextFile); 

Teraz podczas iteracji tablicy w for pętla lub forEach pętli, każda iteracja daje 1 linii.

eg. 

for ($i = 0; $i < $totalLinesinFile ; $i++) { 
    echo "Line number is ".$i."<br>"; 
    echo wholeTextFile[$i]."<hr>"; 
} 
Powiązane problemy