2013-03-19 3 views
1

Я пытаюсь написать файл в PHP. Пока это работает «вроде».PHP fopen ("filename", 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, КЕВИНА ~ 1, MICHAE ~ 1

Когда я собираюсь использовать эти файлы позже в своем коде, и я хочу связать имена пользователей «Роб» с ROB-1, мне нужно сделать еще один шаг для этого. Я чувствую, что неправильно использую fopen, но он делает именно то, что я хочу, за исключением этой маленькой проблемы с именованием.

+1

Какая ОС вы используете? Окна? – blamonet

+3

Каково точное значение '$ user'? Описание проблемы, похоже, предполагает, что хост-система не использует длинные имена файлов, что смешно, и я подозреваю, что это невозможно. Я сомневаюсь, что PHP будет компилироваться в системе, которая не просто из-за возраста. Возможно, это связано с тем, что '$ user' содержит недопустимый символ для использования в именах файлов (моя лучшая догадка будет новой строкой), и это побочный эффект, хотя я уверен, что' fopen() 'должен полностью завершиться в этом сценарии , Попробуйте '$ file = fopen (" ./ employee_lists/". Trim ($ user), 'w');' – DaveRandom

+0

Вы пытались использовать расширение для вашего имени файла? Например $ file = fopen ("./ employee_lists /".$ user.". Txt ", 'w'); – mokk

ответ

2

Кажется, что ваша переменная $user содержит недопустимый символ для путей к файловой системе (мое лучшее предположение - новая строка).

Try:

$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 

Кстати, это плохая идея с использованием имени пользователя для имени файла. Лучше использовать числовой идентификатор.

Смежные вопросы