从python

时间:2016-01-07 10:09:47

标签: python

我有一个php文件。在php文件中,我有这样一个声明:

"$limit_value = ..."

我想通过使用python动态更改此限制值。这意味着,没有任何默认限制值。每当我运行python语句时它都会改变。并且.php文件将被修改。

例如,

"$limit_value = 5"
"$limit_value = 500"
"$limit_value = 34"
...

我在stackoverflow上找到了类似的解决方案,但它们都没有引用我的确切问题。

你能给我一个简单的例子来解决我的问题吗?

由于

3 个答案:

答案 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是您要使用的默认值。

已验证http://i.imgur.com/FNvRmHy.png

答案 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文件名是可变的以及限制值