我有一个php文件。在php文件中,我有这样一个声明:
"$limit_value = ..."
我想通过使用python动态更改此限制值。这意味着,没有任何默认限制值。每当我运行python语句时它都会改变。并且.php文件将被修改。
例如,
"$limit_value = 5"
"$limit_value = 500"
"$limit_value = 34"
...
我在stackoverflow上找到了类似的解决方案,但它们都没有引用我的确切问题。
你能给我一个简单的例子来解决我的问题吗?
由于
答案 0 :(得分:2)
假设您有一个index.php
,它看起来像这样:
<?php
$limit_value = 0;
echo $limit_value;
?>
你可以在python中执行:
import re
rep = re.compile('\$limit_value =.*;')
with open('/path/to/file/index.php', 'r+') as php:
data = rep.sub('$limit_value = 5;', php.read())
php.seek(0) # Places the text "Input" in the file at the beginning of the file
php.write(data)
php.truncate() # This will cause all trailing data to be flushed.
# reason for doing this is because your default value of `$limit_value` might
# make your total content written back to the file shorter of that was writter before.
# there for there might be trailing data we need to truncate away.
这将创建一个正则表达式对象,它将找到任何名为$limit_value =<anything>;
的内容,并将其替换为$limit_value = 5;
,假设5是您要使用的默认值。
答案 1 :(得分:1)
以下应该做你想做的事:
~/Desktop> cat a.php
<?php
// foo
$limit_value = 5317
// bar
?>
~/Desktop> cat a.py
#!/usr/bin/env python
import os
import re
import sys
import random
phpfile = sys.argv[1]
tmpf = "." + phpfile + ".edit"
r = "$limit_value = %d\n" % random.randint(1, 10000)
with open(phpfile) as f:
with open(tmpf, 'w') as g:
for line in f:
g.write(re.sub(r'^\$limit_value\s*=\s*[0-9]*\s*$', r, line))
os.unlink(phpfile)
os.rename(tmpf, phpfile)
~/Desktop> python a.py a.php
~/Desktop> cat a.php
<?php
// foo
$limit_value = 360
// bar
?>
它使用修改后的内容创建文件的副本,并将其重命名为初始文件(在Windows上,您必须先删除目标文件,在Linux上它可能是原子文件)。
那就是说,对你的问题的评论是正确的。可能有更好的方法,例如您的PHP脚本可以以不同的方式接收该限制,无论是配置文件,环境,查询参数等。
答案 2 :(得分:1)
import os, sys
text = "$limit_value = "
new_limit_value = sys.argv[1]
new=open("new.php",'w')
with open('myphp.php', 'r') as f:
for line in f.readlines():
if text in line:
line = line.strip()
line = text+str(new_limit_value)+'\n'
new.write(line)
new.close()
os.rename('myphp.php', 'myphp.php.old')
os.rename('new.php', 'myphp.php')
与python mypython.py 42
打电话
将$limit_value =
行更改为$limit_value = 42
更改使用sys.argv [1]为php filename和sys.argv [2]作为限制值,如果php文件名是可变的以及限制值