C++ 编辑保持其格式的 php 文件
C++ Editing a php file maintaining it's formatting
我有一个C++脚本可以识别人,所以它可以识别人脸,也可以识别属于该人脸的人。我是一个相当C++新手,所以我已经很高兴我能让它工作(原始脚本不是我写的,但需要一些更改才能工作)。
此脚本中有一个函数,当它识别出例如 me,时需要更改 php 文件。
我已经编写了这个函数,但它完全破坏了 php 文件的格式并删除了我不想删除的代码片段。
查找 php 文件并对其进行编辑的C++代码:
if(nWho==P_NICK)
{
fstream calendar("/var/www/html/MagicMirror_Old/calendar.php");
string readout;
string search;
search = "$url = 'some_URL_to_some_site'";
string replace;
replace = "$url = 'some_URL_to_some_other_site'"
while(getline(calendar,readout))
{
if(readout == search)
{
calendar << replace;
}
else
{
calendar << readout;
}
}
}
现在,正在编辑的原始 php 文件在编辑之前具有以下内容:
// Set the url of the calendar feed.
$url = 'some_URL_to_some_site';
/*****************************************/
// Run the helper function with the desired URL and echo the contents.
echo get_url($url);
// Define the helper function that retrieved the data and decodes the content.
function get_url($url)
{
//user agent is very necessary, otherwise some websites like google.com wont give zipped content
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-Language: en-US,en;q=0.8rn" .
"Accept-Encoding: gzip,deflate,sdchrn" .
"Accept-Charset:UTF-8,*;q=0.5rn" .
"User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0 FirePHP/0.4rn",
"ignore_errors" => true //Fix problems getting data
),
//Fixes problems in ssl
"ssl" => array(
"verify_peer"=>false,
"verify_peer_name"=>false
)
);
$context = stream_context_create($opts);
$content = file_get_contents($url ,false,$context);
//If http response header mentions that content is gzipped, then uncompress it
foreach($http_response_header as $c => $h)
{
if(stristr($h, 'content-encoding') and stristr($h, 'gzip'))
{
//Now lets uncompress the compressed data
$content = gzinflate( substr($content,10,-8) );
}
}
return $content;
}
C++编辑文件后,将变为以下内容:
<?php
<?php Set the url of the calendar feed.
Set the url of the calendar feed.= 'https://p01-calendarws.icloud.com/ca/subscribe/1/n6x7Farxpt7m9S8bHg1TGArSj7J6kanm_2KEoJPL5YIAk3y70FpRo4GyWwO-6QfHSY5mXtHcRGVxYZUf7U3HPDOTG5x0qYnno1Zr_VuKH2M';
= 'https://p01-calendarws.icloud.com/ca/subscribe/1/n6x7Farxpt7m9S8bHg1TGArSj7J6kanm_2KEoJPL5YIAk3y70FpRo4GyWwO-6QfHSY5mXtHcRGVxYZUf7U3HPDOTG5x0qYnno1Zr_VuKH2M';***********/
***********/ helper function with the desired URL and echo the contents.
helper function with the desired URL and echo the contents.trieved the data and decodes the content.
trieved the data and decodes the content.ent is very necessary, otherwise some websites like google.com wont give zipped content
ent is very necessary, otherwise some websites like google.com wont give zipped content'header'=>"Accept-Language: en-US,en;q=0.8rn" .
'header'=>"Accept-Language: en-US,en;q=0.8rn" .,deflate,sdchrn" .
,deflate,sdchrn" . "Accept-Charset:UTF-8,*;q=0.5rn" .
"Accept-Charset:UTF-8,*;q=0.5rn" .illa/5.0 (X11; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0 FirePHP/0.4rn",
illa/5.0 (X11; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0 FirePHP/0.4rn",ixes problems in ssl
ixes problems in ssl "verify_peer"=>false,
"verify_peer"=>false,=>false
=>false );
); $context = stream_context_create($opts);
$context = stream_context_create($opts);e,$context);
e,$context); /If http response header mentions that content is gzipped, then uncompress it
/If http response header mentions that content is gzipped, then uncompress it, 'content-encoding') and stristr($h, 'gzip'))
, 'content-encoding') and stristr($h, 'gzip'))the compressed data
the compressed datant = gzinflate( substr($content,10,-8) );
nt = gzinflate( substr($content,10,-8) );tent;
tent;
正如您可能注意到的那样,考虑到文件的原始状态,这不是文件的外观。
基本上只有第二行的$url需要用不同的 url 替换,php 文件的其余格式应该保持不变。有没有办法在C++做到这一点?
在此 SO 答案中获取 replace() 和 replaceAll() 函数的代码来替换字符串中的一些文本:
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
bool replace(std::string& str, const std::string& from, const std::string& to) {
size_t start_pos = str.find(from);
if(start_pos == std::string::npos)
return false;
str.replace(start_pos, from.length(), to);
return true;
}
void replaceAll(std::string& str, const std::string& from, const std::string& to) {
if(from.empty())
return;
size_t start_pos = 0;
while((start_pos = str.find(from, start_pos)) != std::string::npos) {
str.replace(start_pos, from.length(), to);
start_pos += to.length(); // In case 'to' contains 'from', like replacing 'x' with 'yx'
}
}
int main()
{
ifstream calendar("calendar.php");
std::stringstream buffer;
// read whole file in a buffer
buffer << calendar.rdbuf();
// use a new file for output
ofstream newcalendar;
newcalendar.open("newcalendar.php");
string search = "$url = 'some_URL_to_some_site'";
string to = "$url = 'some_URL_to_some_other_site'";
string content = buffer.str();
replaceAll(content, search, to);
newcalendar << content;
newcalendar.close();
calendar.close();
remove("calendar.php");
rename("newcalendar.php", "calendar.php");
return 0;
}
小心,搜索文本的拼写必须准确!
编辑:添加了两行用于重命名文件
相关文章:
- 如何使用PHP将上传到本地主机的一个html文件重定向到磁盘上的另一个html文档
- 从 PHP 调用已编译的C++可执行文件来创建套接字
- 文件写入在PHP扩展c / c ++(linux)中不起作用
- 当 PHP、C++ 和 shell 脚本尝试访问同一个文件时,如何避免错误?
- ESP8266读取 JSON,但不读取 PHP 文件
- Apache在PHP文件上保持文件锁定,直到关闭
- 为什么PHP的Shell_exec没有给出某些A.Out文件的输出
- php 如何从 exe 文件接收多个 cout
- 使用WinHttpReadData从简单php服务检索文件时删除的字符
- 在 PHP 上运行C++可执行文件
- 使用 php 打开可执行文件
- 使用 php 将带有命令行可执行文件路径的参数传递
- 如何从网页上的PHP运行基于服务器客户的CPP文件
- 通过php(LINUX)运行Qt生成的可执行文件(EXE)
- 在Windows上为C++静态库创建.so文件,以便在PHP中使用
- 如何通过PHP在OpenShift上运行C++二进制文件
- 编译php-cpp main.cpp文件时出错
- C++ 编辑保持其格式的 php 文件
- php文件:使用dlopen和dlsym.怎样
- 如何在c++中通过post方法发送数据到php文件