1

PHPでファイルを書き込もうとしています。これまでのところ、それは「一種」で動作します。

{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 Kevin Michael」と表示されますが、ファイル名は次のように保存されます: ROB~1、KEVIN~1、MICHAE~1

これらのファイルを後でコードで使用するときに、"Rob" のユーザー名を ROB~1 に関連付けたい場合は、これを行うために追加の手順を実行する必要があります。私は fopen を間違って使用しているように感じますが、この小さな命名スキームの問題を除いて、私が望んでいることを正確に実行します。

4

2 に答える 2

2

変数にファイル システム パスの無効な文字が含まれているよう$userです (私の推測では、新しい行になります)。

試す:

$file = fopen("./employee_lists/".trim($user), 'w');
于 2013-03-19T15:23:18.910 に答える
1

$user をファイル名として使用する前にサニタイズする必要があります。

$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 を使用することをお勧めします。

于 2013-03-19T15:25:13.943 に答える