我试图在Localhost中使用PHP脚本来绘制某些数学过程的结果,并且我遇到了一些问题。
我的想法是用php上传一个文本文件;将其保存在文件夹中;处理这个文件 用python并在同一个文件夹中保存一个图形;然后显示保存的图形 PHP。
任何人都可以帮助我?
1) 使用以下代码使用php上载数据:
<?php
define("UPLOAD_DIR",realpath(dirname(__FILE__)).'/uploads/' );
$name = $_FILES['myFile']['name'];
chmod(realpath(dirname(__DIR__)).'/uploads', 0755);
chmod(realpath(dirname(__DIR__)).'/uploads/'.$name, 0755);
$success = move_uploaded_file($myFile["tmp_name"],
UPLOAD_DIR . $name);
?>
然后我得到:
警告:chmod():第7行的/opt/lampp/htdocs/myPhpScripts/upload1.php中没有这样的文件或目录 并且文件未保存。
2) 我想用Python做一些信号处理,用php显示保存的图片。
>>> #!/usr/bin/env python
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> x = np.random.randn(100)
>>> y = np.fft.fft(y)
>>> plt.plot(y)
>>> plt.savefig('test.png')
然后我编译我的python脚本
$sudo chmod +x myFft.py
当我从终端运行python代码时,它将test.png保存在当前文件夹中:
$./myFft.py
但是当我用以下代码调用此脚本时:
<?php
$omega = system('./myFft.py');
?>
没有任何反应
所以我把我的python脚本改为:
>>> #!/usr/bin/env python
>>> import numpy as np
>>> x = np.random.randn(100)
>>> y = np.fft.fft(x)
>>> print y
我再次编译python脚本
$sudo chmod +x myFft.py
现在我可以将fft结果存储到php变量中:
<?php
$omega = system('./myFft.py', $pyVal);
?>
$ pyVAl变量存储fft结果。
为什么我可以在终端上保存运行python脚本但不在PHP脚本中的数字?
提前致谢!
答案 0 :(得分:0)
1)您正在尝试chmod一个尚不存在的文件:
chmod(realpath(dirname(__DIR__)).'/uploads/'.$name, 0755);
^^^^^--- you haven't moved the upload yet
move_uploaded_file(...);
订购应该是
move_uploaded_file(...);
chmod(...);
同样请注意,直接使用['name']
这样的参数可以使您的系统完全受到远程攻击。 ['name']
是USER提供的数据,可以包含路径数据。如果有人破解他们的上传说(例如)../../../../../etc/passwd
,那就是你的系统。
2)你是如何运行PHP脚本的?作为命令行,还是通过网络服务器?请记住,这是两个完全不同的环境,具有不同的uid
/ gid
- 在Web服务器下执行的python脚本可能没有写出该文件的权限,而当您在命令中自己运行它时它,它正如你一样运行。