Làm thế nào để ghi vào một tệp trong PHP?


108

Tôi có tập lệnh này trên một máy chủ hỗ trợ PHP miễn phí:

<html>
<body>

<?php
$file = fopen("lidn.txt","a");


fclose($file);
?>

</body>
</html>

Nó tạo ra tệp lidn.txt, nhưng nó trống.

Làm cách nào để tôi có thể tạo một tệp và viết một cái gì đó vào đó, ví dụ như dòng "Mèo đuổi chuột"?

Câu trả lời:


153

Bạn có thể sử dụng một chức năng cấp cao hơn như:

file_put_contents($filename, $content);

đó là giống hệt nhau để kêu gọi fopen(), fwrite()fclose()liên tục để ghi dữ liệu vào một tập tin.

Docs: file_put_contents


3
Chỉ là một phụ chú, chỉ file_put_contents()hoạt động trong PHP5. Có vẻ không phải là vấn đề trong trường hợp này (dù sao thì câu trả lời của bạn cũng có người chấp nhận), nhưng vẫn có thể có một vài máy chủ chạy PHP4.x.
Duroth

2
Một chú thích phụ rất quan trọng: file_put_contents () là một cơn ác mộng về bộ nhớ so với fopen (). Tôi thích sử dụng nó nhưng khi xử lý các tệp lớn, bạn muốn có thể "truyền" dữ liệu vào đó. PHP sẽ yêu cầu nhiều tệp cuối cùng có kích thước như bộ nhớ trong, vì vậy hãy ghi nhớ điều đó khi sử dụng hàm này. Đối với lượng dữ liệu nhỏ hơn, tôi khuyên bạn nên sử dụng nó để dễ sử dụng.
John

1
Sau đó, sử dụng file_put_contents ($ filename, $ other_stream). Nó cũng giống như sử dụng stream_copy_to_stream-), rất hiệu quả về bộ nhớ.
Savageman

@Duroth nó chỉ hoạt động trong PHP5 hay nó chỉ hoạt động từ PHP5? đó là 2 thứ khác nhau.
Xsmael

2
@Xsmael Không phải trong quá khứ xa xôi của năm 2009;) PHP7 không phải là khoảng thời gian đó. Nhưng vâng, put_file_contents()lần đầu tiên được giới thiệu trong PHP5, và đã được đưa vào kể từ đó, trong các phiên bản sau này.
Duroth

88

Hãy xem xét fwrite () :

<?php
$fp = fopen('lidn.txt', 'w');
fwrite($fp, 'Cats chase mice');
fclose($fp);
?>

Bạn có thể sử dụng đoạn mã trên bạn cũng có thể sử dụng file_put_contents để xem chi tiết về làm thế nào để đọc và ghi tập tin mà bạn có thể tham khảo techflirt.com/file-handling-in-php
Ankur Kumar Singh

@sathish sau bằng văn bản cho các tập tin như trên làm thế nào để chúng ta đọc các tập tin mà không đóng tập tin ( fclose($fp) ), tôi thử với $fp = fopen('lidn.txt', 'w+');, $fp = fopen('lidn.txt', 'a+');nhưng không ai trong số họ làm việc
Kasun Siyambalapitiya


10
$text = "Cats chase mice";
$filename = "somefile.txt";
$fh = fopen($filename, "a");
fwrite($fh, $text);
fclose($fh);

Bạn sử dụng fwrite()


sau khi ghi vào tệp như trên làm thế nào để chúng ta đọc tệp mà không đóng tệp ( fclose($fh)), tôi đã thử với $fh = fopen('lidn.txt', 'w+');, `$ fh = fopen ('lidn.txt', 'a +'); 'Nhưng không ai trong số họ làm việc
Kasun Siyambalapitiya

10

Nó rất dễ dàng để ghi tệp:

$fp = fopen('lidn.txt', 'w');
fwrite($fp, 'Cats chase mice');
fclose($fp);

6

Tôi sử dụng mã sau để viết tệp trên thư mục web của mình.

write_file.html

<form action="file.php"method="post">
<textarea name="code">Code goes here</textarea>
<input type="submit"value="submit">
</form>

write_file.php

<?php
// strip slashes before putting the form data into target file
$cd = stripslashes($_POST['code']);

// Show the msg, if the code string is empty
if (empty($cd))
    echo "Nothing to write";

// if the code string is not empty then open the target file and put form data in it
else
{
    $file = fopen("demo.php", "w");
    echo fwrite($file, $cd);

    // show a success msg 
    echo "data successfully entered";
    fclose($file);
}
?>

Đây là một kịch bản làm việc. đảm bảo thay đổi url trong hành động biểu mẫu và tệp đích trong hàm fopen () nếu bạn muốn sử dụng nó trên trang web của mình.

Chúc may mắn.


1
Tôi mới bắt đầu viết php nhưng điều này có vẻ như bạn không chỉ viết một tệp văn bản, mà bạn đang viết một tệp mã php lên máy chủ của mình, tệp này sau đó có thể chạy ngay sau đó bằng cách tham chiếu URL "demo.php". Ai đó có thể viết mã PHP độc hại vào máy chủ của bạn và ngay lập tức thực thi nó, phải không? Tôi cho rằng điều này là để bạn có thể kiểm tra mã của riêng mình nhưng mọi người nên được cảnh báo về những rủi ro của việc triển khai cụ thể này. (Đó là con người nói, tôi thích nó và sẽ với chúng tôi nó bản thân mình)
RufusVS

6

Để ghi vào một tệp, PHPbạn cần phải trải qua các bước sau:

  1. Mở tập tin

  2. Ghi vào tệp

  3. Đóng tệp

    $select = "data what we trying to store in a file";
    $file = fopen("/var/www/htdocs/folder/test.txt", "a");
    fwrite($file  , $select->__toString());
         fclose($file );

6

Đây là các bước:

  1. Mở tập tin
  2. Ghi vào tệp
  3. Đóng tệp

    $select = "data what we trying to store in a file";
    $file = fopen("/var/www/htdocs/folder/test.txt", "w");        
    fwrite($file, $select->__toString());
    fclose($file);

5

fwrite()là một smidgen nhanh hơn và file_put_contents()dù sao cũng chỉ là một phần mềm bao quanh ba phương pháp đó, vì vậy bạn sẽ mất chi phí. Bài báo

file_put_contents (tệp, dữ liệu, chế độ, ngữ cảnh):

Ghi file_put_contentsmột chuỗi vào một tệp.

Hàm này tuân theo các quy tắc này khi truy cập tệp. Nếu FILE_USE_INCLUDE_PATH được đặt, hãy kiểm tra đường dẫn bao gồm để biết bản sao của tên tệp. Tạo tệp nếu nó không tồn tại, sau đó Mở tệp và Khóa tệp nếu LOCK_EX được đặt và Nếu FILE_APPEND được đặt, di chuyển đến cuối tệp. Nếu không, hãy xóa nội dung tệp Ghi dữ liệu vào tệp và Đóng tệp và giải phóng mọi ổ khóa. Hàm này trả về số ký tự được ghi vào tệp khi thành công hoặc FALSE nếu không thành công.

fwrite (tệp, chuỗi, độ dài):

Việc fwriteghi vào một tệp đang mở. Hàm sẽ dừng ở cuối tệp hoặc khi đạt đến độ dài được chỉ định, tùy điều kiện nào đến trước. Hàm này trả về số byte được ghi hoặc FALSE khi bị lỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.