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 :(得分:1)
您的文件打开模式不正确。
' X'创建并仅供写作;将文件指针放在文件的开头。如果文件已经存在,则fopen()调用将失败,返回FALSE并生成级别为E_WARNING [...]的错误
你应该使用' w'模式:
' W'仅供写作;将文件指针放在文件的开头,并将文件截断为零长度。如果该文件不存在,请尝试创建它。
答案 1 :(得分:0)
脚本无法使用fopen()
函数打开流并返回布尔值。函数fwrite()
成为布尔值但需要资源。
原因是您只在流中使用x修饰符创建文件。
创建并仅供写作;将文件指针放在文件的开头。如果文件已存在,则fopen()调用将失败,返回FALSE并生成级别为E_WARNING的错误。如果该文件不存在,请尝试创建它。
您可以在PHP手册中看到有关流模式(PHP manual)的更多信息。
要阻止此消息,请检查该值是否为false。
$stream = fopen("file.txt", "x");
if($stream === false) {
echo "Error while open stream";
}
//here your code