如何更改文件的前512字节? - php

我有一个很大的PHP文件,我想用其他512个字节替换前512个字节。有任何PHP函数可以帮助我吗?

参考方案

如果要选择创建文件并对其进行读写(不截断),则需要在fopen()模式下使用'c+'函数打开文件:

$handle = fopen($filename, 'c+');

然后,PHP具有stream_get_contents()函数,该函数允许将具有特定长度的字节块(并从文件中的特定偏移量)读取到字符串变量中:

$buffer = stream_get_contents($handle, $length = 512, $offset = 0);

但是,没有stream_put_contents()函数将字符串缓冲区在特定位置/偏移处写回到流中。一个相关的功能是file_put_contents(),但是它不允许以特定的偏移量写入文件句柄资源。但是有fseek()fwrite()可以做到这一点:

$bytes_written = false;
if (0 === fseek($handle, $offset)) {
    $bytes_written = fwrite($handle, $buffer, $length);
}

这是全图:

$handle = fopen($filename, 'c+');
$buffer = stream_get_contents($handle, $length = 512, $offset = 0);

// ... change $buffer ...

$bytes_written = false;
if (0 === fseek($handle, $offset)) {
    $bytes_written = fwrite($handle, $buffer, $length);
}
fclose($handle);

如果$buffer的长度不固定,将无法正常工作。在这种情况下,最好使用两个文件并按照stream_copy_to_stream()中所述使用How to update csv column names with database table header,或者如果文件不大,也可以在内存中执行此操作:

$buffer = file_get_contents($filename);

// ... change $buffer ...

file_put_contents($filename, $buffer);

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

PHP:将字符串拆分为字母和数字部分的最佳方法 - php

我有几个格式的字符串AA11 AAAAAA1111111 AA1111111 分离字符串的字母和数字部分的最佳方法(最有效)? 参考方案 如果它们都是一系列字母,然后是一系列数字,并且没有非字母数字字符,那么sscanf()可能比regexp更有效$example = 'AAA11111'; list($alpha,$numeric) =…

获取PHP中函数调用者的__FILE__常量 - php

我知道PHP中的__FILE__魔术常数将变成当前执行文件的完整路径和文件名。但是,有什么方法可以使函数的调用文件获得相同的信息吗?例如://foo.php: include "bar.php"; call_it(); //bar.php function call_it() { echo "Calling file: …

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

PHP:从函数返回值并直接回显它? - php

这可能是一个愚蠢的问题,但是……的PHPfunction get_info() { $something = "test"; return $something; } html<div class="test"><?php echo get_info(); ?></div> 有没有办…