并非所有文本都写入文件

时间:2017-07-22 14:19:29

标签: php

我有shell_exec的输出,如下所示:

0134d690 W ContainerSetContentPacket::getName() const                  
00d06f64 W ResourcePackDataInfoPacket::getId() const                   
00d06f80 W ResourcePackDataInfoPacket::write(BinaryStream&) const      
00d0713c W ResourcePackDataInfoPacket::handle(NetworkIdentifier const&, 
NetEventCallback&) const                                              
00d06f68 W ResourcePackDataInfoPacket::getName() const                 
00bf510c W StructureBlockUpdatePacket::getId() const                   
00bf5128 W StructureBlockUpdatePacket::write(BinaryStream&) const      
00bf52f0 W StructureBlockUpdatePacket::handle(NetworkIdentifier const&, 
NetEventCallback&) const

我正在尝试将该方法写入具有类名的文件。如果你不知道我在说什么,那就是一个例子:

ClassName::function()
ClassName::function2()

我想将function()function2()写入名为ClassName.txt的文件中。现在我的代码创建了所有文件并只添加了一个函数(getName())或上面的示例function()但不是function2()

现在这是一个问题。当我在写入文件之前回显下面的$method变量时,它会显示所有函数,但它只会将一个函数写入文件。

PHP代码:

<?php

$out = trim(shell_exec("nm -DC *.so | grep 'Packet::'"));
$out = explode("\n", $out);
$out = array_filter($out, "trim"); 
foreach($out as $line) {
    $line = explode(' ', $line, 2);
    $class = substr($line[1], 0, strpos($line[1], "::"));

if(strpos($class, "std") === false and strpos($class, "void") === false
    and strpos($class, "vtable") === false) {

    $title = array_filter(explode("\n", substr($class, 2)), "trim");
}

foreach($title as $name) {
    $function = substr($line[1], strpos($line[1], "::"));
    $function = substr($function, 0, strpos($function, ")"));

    if(strpos($function, "_") === false and strpos($function, "<") === false 
        and strpos($function, "+") === false
        and strpos($function, "vtable") === false
        and strpos($function, "void") === false) {

        $method = str_replace("W", "", "void $function);");
        $method = str_replace("T", "", $method);
        $method = str_replace("::", "", $method);
    }
    file_put_contents("stuff/$name.txt", $method . PHP_EOL);    
}

}

1 个答案:

答案 0 :(得分:0)

当您拨打file_put_contents时,该文件将被覆盖。所以你要写入文件,然后在每次循环迭代时覆盖文件。

你可以使用FILE_APPEND作为file_put_contents的第三个参数来告诉它附加到文件,但在这种情况下,它可能更有意义的是先fopen(),然后{ {1}}对于循环中的每次迭代,然后在结尾处调用fwrite()。这样,文件只打开一次,而不是循环的每次迭代。

fclose()