2013-03-19 72 views
1

我想在PHP中編寫一個文件。到目前爲止它工作「種」。PHP的fopen(「文件名」,W)創建〜1的文件

我有{Rob,Kevin,Michael}格式的名稱數組。我使用的代碼行

foreach($Team as $user) 
{ 
print_r($user); 
    //create a file for each user 
    $file = fopen("./employee_lists/".$user, 'w'); 
    //I have also tried: fopen("employee_lists/$user", 'w'); 
    // ... ... ... 
    //write some data to each file. 
} 

這按預期工作:在print_r的節目 「搶凱文·邁克爾」,然而,被保存的文件名如下:ROB〜1,KEVIN〜1,MICHAE〜1

當我在我的代碼中稍後使用這些文件時,我想將「Rob」的用戶名與ROB〜1關聯起來,我將不得不採取一些額外的步驟來執行此操作。我覺得我不正確地使用fopen,但它正是我想要的減去這個小命名方案問題。

+1

你在使用什麼操作系統?視窗? – blamonet 2013-03-19 15:16:25

+3

'$ user'的確切值是什麼?問題描述似乎表明主機系統不使用長文件名,這是荒謬的,我懷疑是不可能的 - 我懷疑PHP會在不僅僅因爲年齡的系統上編譯。也許這是因爲'$ user'包含一個用於文件名的無效字符(我最好猜測是一個新行),這是一個副作用,儘管我確信'fopen()'應該在這種情況下完全失敗。嘗試'$ file = fopen(「./ employee_lists /」。trim($ user),'w');' – DaveRandom 2013-03-19 15:16:41

+0

您是否嘗試過使用擴展名來存儲文件名?像$ file = fopen(「./ employee_lists /".$ user。」。txt「,'w'); – mokk 2013-03-19 15:18:39

回答

2

它看起來像你的$user變量包含一個無效的字符文件系統路徑(我最好的猜測會是一個新行)。

嘗試:

$file = fopen("./employee_lists/".trim($user), 'w'); 
1

你應該使用它作爲一個文件名前消毒$用戶。

$pattern = '/(;|\||`|>|<|&|^|"|'."\n|\r|'".'|{|}|[|]|\)|\()/i'; 
// no piping, passing possible environment variables ($), 
// seperate commands, nested execution, file redirection, 
// background processing, special commands (backspace, etc.), quotes 
// newlines, or some other special characters 
$user= preg_replace($pattern, '', $user); 
$user= '"'.preg_replace('/\$/', '\\\$', $user).'"'; //make sure this is only interpreted as ONE argument 

順便說一句,使用用戶名作爲文件名是一個壞主意。最好使用數字ID。