2016-09-03 2 views
2
while (($line = fgets($handle)) !== false) { 
//look for the first payor block 
if(strpos($line, 'N1*PR*') !== false || $block_start) { 
$header_end = true; $block_start = true; 
    //see if the block finished 
if(strpos($line, 'CAS*CO*45*20.43**253*1.27~') !== false) { 
$block_start = false; 
$payor_blocks[$count] .= $line; 
$count++; 
} 
    $payor_blocks[$count] .= $line; 
    } else { 
    //append to the header 
    if($header_end) { 
    $footer .= $line."\n"; 
} else { 
$header .= $line."\n"; 
} 
    } 
} 

//get payor blocks and create a file foreach payor 
$new_files = array(); 
foreach($payor_blocks as $block) { 
$filename = $file . "_" . $count; 
$count++; 
$new_files[] = array(
'name' => $filename, 
'content' => $header."\n".$block."\n".$footer 

); 

//loop through new files and create them 
    foreach($new_files as $new_file) { 
    $myfile = fopen($file, "x"); 
    fwrite($myfile, $new_file['content']); 
    //close the file 
    fclose($myfile); 

У меня есть код, указанный выше, это, предполагают, чтобы быть в состоянии открыть исходный файл с именем "$file" и создать новый файл затем закрыть его, однако его не создает, и когда я запускаю его, я получаю эту ошибку:Создание новых файлов из старого

Warning: fopen(362931550.1a): failed to open stream: 
File exists in /script2.php on line 90 Warning: 
fwrite() expects parameter 1 to be resource, 
boolean given in /script2.php on line 94 Warning: 
fclose() expects parameter 1 to be resource, boolean 
given in /script2.php on line 96 

Любая помощь любезно оценена.

Я один файла с именем: 362931550.1a Я сделал код, который расщепляет их в определенных областях (его довольно долго, чтобы получить возможность отправлять), когда я запустить сценарий, когда я вижу его на моем браузере, но это не создает 2 новых файлов в папке.

+0

чтения, что с 'x' режим -' Если файл уже существует, Еореп() приведет к ошибке, возвращая FALSE и генерируется ошибка уровня E_WARNING.' –

+0

я попытался положить ш однако я не получил выход, который я хотел., любые идеи, что еще я мог бы поставить? @u_mulder –

+0

Мы не знаем, какой результат вы хотите и что получите, пожалуйста, отредактируйте свой вопрос и уточните. –

ответ

1

Неверный режим открытия файла.

От php.net documentation:

'x' Create and open for writing only; place the file pointer at the beginning of the file. If the file already exists, the fopen() call will fail by returning FALSE and generating an error of level E_WARNING [...]

Вы, вероятно, следует использовать режим 'W':

'w' Open for writing only; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.

+0

Что я могу поставить вместо x, который дает мне результат, который я хочу? –

+0

Я пробовал, что он просто ставит один файл вместо старого, он не создает 2 новых. –

+1

В вашем примере нет кода для создания двух файлов. Просьба уточнить вашу проблему. – madneon

0

Сценарий не удалось открыть поток с функцией fopen() и возвращают логическое значение. Функция fwrite() становится логическим значением, но требует ресурса.

Причина в том, что вы создаете файлы с помощью x-модификатора в потоке.

Create and open for writing only; place the file pointer at the beginning of the file. If the file already exists, the fopen() call will fail by returning FALSE and generating an error of level E_WARNING. If the file does not exist, attempt to create it.

Вы видите в PHP руководстве подробной информации о поточном режимах (PHP manual).

Чтобы предотвратить это сообщение, проверьте, не имеет ли значение значение false.

$stream = fopen("file.txt", "x"); 
if($stream === false) { 
    echo "Error while open stream"; 
} 

//here your code 
Смежные вопросы