apache 通过php运行的python脚本(PHP和mod-php的区别)

idfiyjo8  于 2023-11-21  发布在  Apache
关注(0)|答案(3)|浏览(138)

这里有一些通过apache mod-php运行python脚本的困难

fname='/tmp/catalog.xml'
http=urllib3.PoolManager()
response=http.request('GET','https://xxxx/xxxxx.xml')
doc=response.data.decode('UTF-8')
print('Saving xml...')
with open(fname,'w') as catalog:
    catalog.write(doc)
print('Parsing...')

字符串
这段代码从php脚本执行,当我从PHP执行它时,它可以完美地工作:sudo -u www-data php -f test.php,在tmp目录中出现文件catalog.xml与数据在其中.但当我通过Web浏览器执行相同的php脚本,从执行的结果只是字符串“保存xml.",和空文件catalog.xml在tmp目录.不知何故,数据没有写入文件,但它创建
所有permissoins是正确的,文件创建,但它是空的,有没有错误,在所有的php日志文件

disho6za

disho6za1#

问题解决了。这是编码问题。很奇怪,它的工作很大,在PHP中,而不会在mod-php。我只是添加编码='utf-8'

fname='/tmp/catalog.xml'
http=urllib3.PoolManager()
response=http.request('GET','https://xxxx/xxxxx.xml')
doc=response.data.decode('UTF-8')
print('Saving xml...')
with open(fname,'w',encoding='utf-8') as catalog:
    catalog.write(doc)
print('Parsing...')

字符串
而且很有效

qzwqbdag

qzwqbdag2#

当您从Web浏览器通过Apache的mod-php运行Python脚本时,有几个因素可能会导致您所描述的问题。以下是您可以采取的一些步骤来诊断并解决问题:
检查Web服务器环境:
确保Web服务器(例如Apache)具有写入/tmp目录的权限。您可能需要专门授予Apache运行时所使用的用户(通常在许多Linux发行版上为www-data)写入权限。您可以使用chmod命令来完成此操作。

sudo chmod 777 /tmp

字符串
验证PHP脚本在通过Web浏览器访问时和从命令行执行时(在您的情况下是www-data)是否以同一用户身份运行。这一点很重要,因为两种执行方法的文件权限和环境变量可能不同。
检查PHP配置:
确保您没有遇到任何PHP执行限制或超时。如果长时间运行的脚本超过配置的限制,则可能会被PHP终止。您可以检查PHP配置中的这些限制,例如max_execution_time、memory_limit和post_max_size。检查错误:
由于您提到PHP日志文件中没有错误,因此请考虑在PHP脚本中添加错误处理,以捕获可能未记录的任何潜在问题。例如,使用try-catch块捕获异常并将其记录到文件中。

try {
    // Your Python script here
} catch (Exception $e) {
    error_log('Error: ' . $e->getMessage(), 0);
}


此外,您可以通过在Python代码周围添加错误处理来检查Python脚本本身中的错误,例如使用open()检查的返回值并记录任何错误。

在PHP脚本中添加调试语句以帮助缩小问题范围。例如,在解码响应后打印出doc变量的值,以确保它包含预期的数据。

echo 'Response Data: ' . $doc;


您还可以使用PHP中的error_log函数来记录自定义消息,这些消息可以帮助您跟踪脚本的执行路径。
环境变量:
验证Python脚本在Web服务器上运行时所需的环境变量是否正确设置。CLI和Web服务器环境中的环境变量可能不同。您可以在PHP中使用getenv()检查环境变量的值。

echo 'Python Path: ' . getenv('PATH'); // Check the PATH variable


SELinux或AppArmor:
如果您使用的是SELinux或AppArmor,请确保这些安全模块不会阻止Apache进程写入/tmp目录。通过系统地检查这些因素,您应该能够找到问题并解决它。更改权限时要小心,并确保在故障排除后正确保护Web服务器。

qf9go6mv

qf9go6mv3#

我们可以尝试在那里添加一些错误处理吗?看看是否有什么事情可能会在绝望中发生?
喜欢的:

fname='/tmp/catalog.xml'
http=urllib3.PoolManager()
response=http.request('GET','https://xxxx/xxxxx.xml')
doc=response.data.decode('UTF-8')
print('Saving xml...')
try:
   with open(fname,'w') as catalog:
      catalog.write(doc)
except Exception as e: 
    print(e)

字符串

相关问题