从旧文件创建新文件

时间:2016-09-03 11:38:08

标签: php

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个新文件。

2 个答案:

答案 0 :(得分:1)

您的文件打开模式不正确。

来自php.net documentation

  

' 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