【问题标题】:how to replace content of a file in php with out concurrency issues如何在没有并发问题的情况下替换php中文件的内容
【发布时间】:2015-10-06 07:09:46
【问题描述】:

我想为 left.php

的链接附加一个 HTML 属性 id="active"

left.php 应该有只有一个链接 id="active"

下面的代码实际上是按照我的要求工作的,但是由于并发问题,过了一段时间 left.php 的内容完全丢失了

我该如何解决这个问题?

我认为我们可以有一个 java 脚本解决方案来在客户端处理这个问题。 请通过示例告诉我最佳解决方案。

谢谢大家。

<?php 
$searchF1  = ' id="active"';
$replaceW1 = '';
$searchF = basename(__FILE__).'"';
$replaceW = $searchF.' id="active"';

$myfile = fopen( 'left.php', 'rt' );
flock( $myfile, LOCK_SH );
$file = file_get_contents( 'left.php' );
fclose( $myfile );

$file = str_replace( $searchF1, $replaceW1, $file );
$file = str_replace( $searchF, $replaceW, $file );

file_put_contents('left.php', $file);

include('left.php');
?>  

【问题讨论】:

标签: javascript php


【解决方案1】:

我认为您正在尝试将当前页面的链接设置为活动状态。在这种情况下,你做错了。所有逻辑都必须在left.php 文件中。你可以这样做:

$pages = array(
    'firstPage.php'  => 'First Page',
    'secondPage.php' => 'Second Page',
    'thirdPage.php'  => 'Third Page',
);

$currentParsedUrl = parse_url("http://$_SERVER[SERVER_NAME]$_SERVER[REQUEST_URI]");
$currentPath = ltrim($currentParsedUrl['path'], '/');

foreach ($pages as $path => $name) {
    echo '<a href="/' . $path . '"'; 
    echo $currentPath == $path ? ' id="active"' : '';
    echo '>' . $name . '</a>';
}

现在您所要做的就是将left.php 文件包含在您想要显示这些链接的任何位置。

【讨论】:

  • 感谢 Matei Mihai,你让我想到了开箱即用的方法。我会尽力让大家知道。
【解决方案2】:

而不是 file_put_contents 并包含 try eval。然后,您将跳过编写文件并将其用作模板。

下个版本请尝试使用程序或OOP。

【讨论】:

  • 当然,Richard,我很高兴您提出宝贵的建议。非常感谢您花时间回答。美好的一天!
【解决方案3】:

我通过在我的 left.php 末尾添加以下 script 来在客户端完成此操作。

它正在工作,我认为这是获得最佳性能的一个很好的解决方案。谢谢。

<script>
var name = window.location.href.substr(window.location.href.lastIndexOf("/")+1);
var pattern = /.php/;
var exists = pattern.test(name);
if(exists){  $('a[href$="'+name+'"]').css('font-weight', 'bold');}
else{  $('#left').find('a:first').css('font-weight', 'bold');}  
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 2019-05-12
    相关资源
    最近更新 更多