[英]comma separated in text file in php
if(isset($_POST['submit']))
{
$file = $_FILES['file']['name'];
$fh = fopen($file,'r+');
// string to put username and passwords
$users = '';
while(!feof($fh)) {
$user = explode(' ',fgets($fh));
foreach ($user as $value)
{
$number= rand(1000,10000);
$final_number[] = $value .','. $number;
}
}
//print_r($final_number);
file_put_contents($_FILES['file']['name'], $final_number);
}
這是我的代碼,用逗號將隨機文本附加到字符串中並保存在文本文件中,但是當我保存它時,逗號后它沒有正確保存,將轉到下一行,這應該不會發生。
我將使用與您不同的方法,假設您要保存到文件的$data
存儲在變量$data
。
因此,首先要使用逗號將此數據附加到文件中,我們可以僅使用兩行代碼:
$previousFileContent = file_get_contents("filename.txt");
file_put_contents("filename.txt", trim($previousFileContent . "," . $data));
您的代碼始於一個非常大的問題:您嘗試打開並讀取一個很可能不存在的文件。
$file = $_FILES['file']['name'];
$fh = fopen($file,'r+');
如您在文檔中所讀,假設您的表單包含類型為file
的input
元素,其名稱為file
,則$_FILES['file']['name']
是用戶計算機上上傳文件的原始名稱。 它僅是名稱, 而不是服務器上文件的名稱。 它只是作為文件內容的提示(請檢查文件擴展名),但您不能依賴它。
該文件的內容臨時存儲在Web服務器上的文件中,該文件的路徑可以在$_FILES['file']['tmp_name']
。 您應該將其傳遞給PHP函數is_uploaded_file()
以確保文件已上傳並且腳本不是注入嘗試的受害者,然后,如果需要保留它,請使用move_uploaded_file()
將其移動到需要的位置。 如果您不移動它,則在腳本結束時,將刪除臨時文件。
您的代碼的另一個問題是在線上:
$user = explode(' ',fgets($fh));
foreach ($user as $value)
如文檔中所述,沒有第二個參數的情況下調用的函數fgets()
會從輸入文件中讀取一行,包括以該行結尾的換行符。 由於您將行拆分為單詞,因此我認為您不需要換行符。 您可以通過將trim()
與fgets()
返回的字符串一起使用來刪除它,然后再將其傳遞給explode()
。
該代碼的最后一期是:
file_put_contents($_FILES['file']['name'], $final_number);
因為$final_number
是一個數組1 ,所以file_put_contents()
連接其元素以獲取字符串並將該字符串寫入文件。 此操作將為$value
value生成的隨機值與下一個$value
並且無法確定數據存儲在文件中的哪個之后。 您可能需要將它們分開放置。 在$final_number
上使用函數implode()
,其第一個參數為"\\n"
,然后將生成的字符串寫入文件中。
最后一個: 不要將生成的內容寫入$_FILES['file']['name']
。 不安全! 它包含從瀏覽器接收到的字符串。 惡意用戶可以在其中放置所需的任何路徑,並且腳本將覆蓋不應更改的文件。
創建一個專用於存儲由代碼生成的文件的目錄,並根據存儲在此處的文件的始終遞增的計數器(當前time()
或microtime()
fe)生成文件名。 永遠不要信任您從瀏覽器收到的數據。
1 $final_number
用作$final_number[] = ...
並且由於在第一次執行此代碼行時未定義它,因此PHP為您創建一個空數組並將其存儲在$final_number
。 不要依賴此功能。 始終在首次使用變量之前對其進行初始化。 把$final_number = array();
在while()
之前。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.