如何使文件编辑有条件?

时间:2017-09-06 09:03:11

标签: php if-statement replace

这是我的代码:

$file = '/etc/apache2/sites-available/000-default.conf';
// Laravel Projects
$newDirectory = "<Directory $path/public>
                     Allow Override all
                     Require all granted
                  </Directory>";
$virtualHost = file_put_contents($file,str_replace("</VirtualHost>","$newDirectory\n\n</VirtualHost>",file_get_contents($file)));

它也有效。如您所见,它打开000-default.conf文件(在linux中)并在<VirtualHost>块的末尾添加一个新目录。

我的问题是,有时其余代码会抛出错误,当我再次运行整个脚本时,上面的代码会将该目录追加两次。

我如何在file_put_contents的路上添加条件,首先检查同一目录是否存在,然后追加,否则不做任何事情?

3 个答案:

答案 0 :(得分:1)

这就是尝试捕获块的原因。我在移动设备上,所以我无法为您提供代码,但这里有一个小小的想法:

保存原始文件内容并将代码包装在try catch块中。如果发生错误,请将文件重置为catch块中的原始内容。

答案 1 :(得分:1)

  

如何在file_put_contents的路上添加条件,首先检查是否存在相同的目录,

如果文件不是很大,你可以把它读成字符串并用strpos检查:

const MyAppStack = StackNavigator({
  Login: { screen: LoginPage },
  Home: { home: HomePage } 
});

class MyApp extends Component {
  componentWillMount() {}
  componentWillUnmount() {}

  render() {
    return <MyAppStack />;
  }
}

答案 2 :(得分:1)

你需要像下面这样做: -

<?php
 $file = '/etc/apache2/sites-available/000-default.conf';
 // Laravel Projects
 $newDirectory = "<Directory $path/public>
                 Allow Override all
                 Require all granted
              </Directory>";

  $virtualHostContent = file_get_contents($file);
  if( strpos($virtualHostContent,"<Directory $path/public>") === false) {
     $virtualHost = file_put_contents($file,str_replace("</VirtualHost>","$newDirectory\n\n</VirtualHost>",$virtualHostContent));
  }
?>