Tôi hiện đang cố gắng sử dụng file_put_contents
để cập nhật tệp JSON của tôi. Đây là giao diện PHP của tôi hiện tại
$result = file_put_contents['Resources/logs/file.json', $newJsonString];
if[$result === true] {
echo "true";
} else {
echo "false";
}
Tuy nhiên, nó luôn trả về false
. Tuy nhiên, tôi đã đặt quyền truy cập thư mục thành 777 cho CẢ HAI Resources
và logs
. Tôi cũng đã đặt quyền đối với tệp thành 777 cho file.json
Đường dẫn cũng đúng, vì file_get_contents
hoạt động với cùng một đường dẫn từ cùng một tệp
Để chứng minh thêm quan điểm của mình, tôi cũng đã chạy
$jsonString = file_get_contents['Resources/logs/file.json'];
$data = json_decode[$jsonString];
$data->coins = $data->coins + $coins;
$data->uses = $data->uses + 1;
print_r[$data];
$newJsonString = json_encode[$data];
$result = file_put_contents['Resources/logs/file.json', $newJsonString];
if[$result === true] {
echo "true";
} else {
echo "false";
}
0 để cấp quyền cho thư mục Resources
[và mọi thứ bên trong] được ghi vào bởi người dùng $jsonString = file_get_contents['Resources/logs/file.json'];
$data = json_decode[$jsonString];
$data->coins = $data->coins + $coins;
$data->uses = $data->uses + 1;
print_r[$data];
$newJsonString = json_encode[$data];
$result = file_put_contents['Resources/logs/file.json', $newJsonString];
if[$result === true] {
echo "true";
} else {
echo "false";
}
2 [tôi cho rằng sẽ cho phép tệp JSON được ghi vào bằng cách chạy PHP Tôi không biết điều này có hữu ích không, nhưng tôi cũng đang chạy tập lệnh PHP này bằng cách gửi dữ liệu
$jsonString = file_get_contents['Resources/logs/file.json'];
$data = json_decode[$jsonString];
$data->coins = $data->coins + $coins;
$data->uses = $data->uses + 1;
print_r[$data];
$newJsonString = json_encode[$data];
$result = file_put_contents['Resources/logs/file.json', $newJsonString];
if[$result === true] {
echo "true";
} else {
echo "false";
}
3 tới tập lệnh đó qua JavaScript từ một máy chủ/trang web khácTại sao trên thế giới file_put_contents
VẪN trả về sai và không ghi vào tệp?
Mã bổ sung
Đây là toàn bộ đoạn mã, bao gồm cả phần file_put_contents
$jsonString = file_get_contents['Resources/logs/file.json'];
$data = json_decode[$jsonString];
$data->coins = $data->coins + $coins;
$data->uses = $data->uses + 1;
print_r[$data];
$newJsonString = json_encode[$data];
$result = file_put_contents['Resources/logs/file.json', $newJsonString];
if[$result === true] {
echo "true";
} else {
echo "false";
}
…và đây là tệp JSON
{"coins":"0","uses":"0"}
Mọi trợ giúp sẽ được đánh giá cao, tôi đã cố gắng khắc phục sự cố này cả ngày rồi
Chỉnh sửa 1
Tôi quên đề cập đến điều này, nhưng mã này đã hoạt động hoàn toàn tốt vào ngày hôm qua trong khoảng một giờ. Sau đó, đột nhiên nó ngừng hoạt động và bắt đầu làm cho tệp JSON trống
Chỉnh sửa 2
Tôi vừa xóa nhật ký lỗi Apache và tập lệnh hoạt động trở lại [điều này tốt]. Tuy nhiên, file_put_contents
vẫn đang trở lại false
. Chuyện gì đang xảy ra…
Chỉnh sửa 3
Cảm ơn Laurent Wartel, tôi đã cập nhật câu lệnh if của mình cho file_put_contents
và có vẻ như nó không còn trả về false nữa
Đối số đầu tiên là bắt buộc và nó được sử dụng để xác định tên tệp nơi dữ liệu sẽ được ghi
Đối số thứ hai là bắt buộc và được sử dụng để xác định dữ liệu được ghi trong tệp
Đối số thứ ba là tùy chọn, được sử dụng để xác định việc mở tệp hoặc ghi dữ liệu. Có thể sử dụng bất kỳ giá trị nào sau đây trong đối số này
FILE_USE_INCLUDE_PATH
Nó được sử dụng để tìm kiếm tệp trong thư mục bao gồm
FILE_APPEND
Nếu tệp tồn tại, nó được sử dụng để thêm dữ liệu vào cuối tệp
LOCK_EX
Nó được sử dụng để đặt khóa độc quyền trên tệp khi ghi
Đối số thứ tư là tùy chọn và được sử dụng để xác định hành vi của luồng hoặc ngữ cảnh để xử lý tệp
Hàm trả về số ký tự được ghi vào tệp và trả về giá trị Sai nếu không có dữ liệu nào được ghi vào tệp
file_put_contents[] Ví dụ về chức năng
Các cách sử dụng khác nhau của hàm file_put_contents[] đã được trình bày trong phần tiếp theo của hướng dẫn này bằng nhiều ví dụ. Bạn đã đặt các quyền đọc và ghi cần thiết cho thư mục chứa tệp trước khi thực hành các ví dụ của hướng dẫn này; . Chạy lệnh sau để đặt tất cả quyền cho thư mục, ‘/var/www/html/php’
$ sudo chmod - R 777 /var/www/html/php
Ví dụ 1. Ghi/Ghi đè Nội dung vào Tệp
Tạo một tệp PHP với tập lệnh sau sẽ viết văn bản trong tệp văn bản nằm trong thư mục, '/var/www/html/php'. Nếu nhiệt độ. txt tồn tại trước đó, thì file_put_contents[] sẽ ghi đè lên nội dung của tệp. Nếu nhiệt độ. txt không tồn tại, thì hàm file_put_contents[] sẽ tự động tạo tệp trước khi ghi. Tiếp theo, hàm file_get_contents[] được sử dụng trong tập lệnh để kiểm tra xem văn bản đã được ghi đúng vào tệp hay chưa
đầu ra
Đầu ra sau sẽ xuất hiện sau khi thực thi đoạn mã trên nếu văn bản được viết đúng trong tệp
Ví dụ-2. Nối dữ liệu vào một tên tệp hiện có
Tạo một tệp PHP với tập lệnh sau sẽ nối thêm văn bản với dòng mới vào tệp văn bản hiện có nằm trong thư mục, '/var/www/html/php'. Các tùy chọn FILE_APPEND và LOCK_EX được sử dụng trong đối số thứ ba của hàm file_put_contents[] để nối thêm văn bản vào tệp tạm thời. tập tin txt. Tiếp theo, hàm file_get_contents[] được sử dụng trong tập lệnh để kiểm tra xem văn bản đã được ghi đúng vào tệp hay chưa
đầu ra
Đầu ra sau sẽ xuất hiện sau khi thực thi đoạn mã trên nếu văn bản được nối đúng vào tệp
Ví dụ-3. Viết/Ghi đè nội dung tệp bằng FILE_USE_INCLUDE_PATH
Bạn phải bật lệnh include_path trong php. ini để sử dụng tùy chọn FILE_USE_INCLUDE_PATH, đối số thứ ba của hàm file_put_contents[]. mở php. ini và xóa dấu chấm phẩy [;] ở đầu dòng sau
include_path = ". /usr/share/php"
Chạy lệnh sau từ thiết bị đầu cuối để khởi động lại máy chủ apache sau khi thay đổi php. tập tin ini
$ sudo dịch vụ apache2 khởi động lại
Tạo tệp PHP với tập lệnh sau sẽ ghi/ghi đè văn bản bằng dòng mới trong tệp văn bản hiện có có tên myfile. txt nằm ở vị trí được xác định trong chỉ thị include_path. Tiếp theo, hàm file_get_contents[] đã được sử dụng trong tập lệnh để kiểm tra văn bản đã được viết đúng trong tệp hay chưa
đầu ra
Đầu ra sau sẽ xuất hiện sau khi thực thi đoạn mã trên nếu văn bản được viết đúng trong tệp
Ví dụ-4. Ghi vào tệp bằng cách tạo thư mục
Tạo tệp PHP với tập lệnh sau sẽ ghi/ghi đè lên văn bản bằng dòng mới trong tệp văn bản có tên là thử nghiệm. txt nằm bên trong thư mục có tên ‘tạm thời’ bằng cách sử dụng hàm do người dùng xác định có tên WriteIntoFile[]. Hàm này sẽ tạo thư mục nếu thư mục không tồn tại ở vị trí hiện tại trước khi ghi vào tệp. Tiếp theo, hàm file_get_contents[] được sử dụng trong tập lệnh để kiểm tra xem văn bản đã được ghi đúng vào tệp hay chưa
đầu ra
Đầu ra sau sẽ xuất hiện sau khi thực thi đoạn mã trên nếu văn bản được viết đúng trong tệp
Phần kết luận
Các cách khác nhau để ghi nội dung vào tệp bằng cách sử dụng hàm file_put_contents[] đã được trình bày trong các ví dụ của hướng dẫn này để giúp người dùng PHP áp dụng đúng chức năng này trong tập lệnh của họ