假设我有一个中等大小的文本文件(~850kb,10,000+ 行)
我想替换分布在文件中的特定行(或几行)。
当前执行此操作的方法包括重写整个文件。我当前使用的方法是逐行读取整个文件,写入 .tmp 文件,完成后,我将 tmp 文件 rename() 为原始源文件。
它有效,但速度很慢。当然,随着文件的增长,执行时间也会增加。
是否有另一种方法(使用 PHP)来完成工作,而不必每次需要替换或删除一两行时都重写整个文件?
谢谢!我环顾四周,在stackoverflow上找不到答案。
让我们假设如下:
private $array = array(/*really big multi-dimensional array*/);
public function &func1($specific_large_sub_array_key)
{
return $this->array[$specific_large_sub_array_key]
}
public function func2()
{
$specificArray = &$this->func1(1);
$this->func3($specificArray);
}
public function func3($specificArray)
{
/* do stuff here*/
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
如果func3没有指定$ specificArray没有通过引用传递,那么PHP在func2中调用func3时是否会复制$ specificArray?或者PHP保留引用并自动传播它?
即这......
public function func3($specificArray)
{
unset($specificArray[234]);
}
Run Code Online (Sandbox Code Playgroud)
...影响$ array?
谢谢
注意,这个例子非常简单.
之间有什么区别:
public function init(a_class_name $classObj)
Run Code Online (Sandbox Code Playgroud)
和
public function init($classObj)
Run Code Online (Sandbox Code Playgroud)
不同之处在于示例1指定了我得到的对象类型.我的问题是:php仍然通过引用传递对象(默认行为)或者是示例1克隆对象的一些奇怪的快捷方式.我只是问,因为在更严格的语言(C,Java)中,示例1非常简单(并且是唯一可行的示例).在PHP中它并不那么清楚,并且这两种方法都在PHP文档的不同位置使用.
谢谢.
我想知道在我的网络应用程序中使我的Memcache操作atmoic的最佳方法是什么.
考虑以下场景:
Client 1 connects and retrieves data from key 1
Client 2 connects a few microsecond after Client 1, requests the same data from key 1
Client 1 saves new data to key 1
Client 2 saves new (different data) to key 1, not taking into account that Client 1 modified the value already
Run Code Online (Sandbox Code Playgroud)
在这种情况下,过程中没有原子性.
我的(潜在)解决方案是在我的应用程序中设置,获取和释放键上的锁.
因此,在我执行之后,上面的过程会像这样工作:
Client 1 connects, checks for an active lock on key 1, finds none, and gets the data
Client 2 connects a few …Run Code Online (Sandbox Code Playgroud)