我有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);
}
}
答案 0 :(得分:0)
当您拨打file_put_contents
时,该文件将被覆盖。所以你要写入文件,然后在每次循环迭代时覆盖文件。
你可以使用FILE_APPEND
作为file_put_contents
的第三个参数来告诉它附加到文件,但在这种情况下,它可能更有意义的是先fopen()
,然后{ {1}}对于循环中的每次迭代,然后在结尾处调用fwrite()
。这样,文件只打开一次,而不是循环的每次迭代。
fclose()