用python保存图并用php显示

时间:2014-03-14 21:38:51

标签: php python

我试图在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脚本中的数字?

提前致谢!

1 个答案:

答案 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脚本可能没有写出该文件的权限,而当您在命令中自己运行它时它,它正如你一样运行。