簡體   English   中英

逗號分隔在php中的文本文件中

[英]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+');

如您在文檔中所讀,假設您的表單包含類型為fileinput元素,其名稱為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM