涉及安装xampp、NetBeans、PHP

此部分为xampp和NetBeans

1、https://www.apachefriends.org/zh_cn/index.html页面下载XAMPP,安装位于D盘

2、打开XAMPP Control Panel,然后打开此链接https://blog.csdn.net/aoshilang2249/article/details/46934419
    针对情况修改(tips最好不要修改,不然后面出现错误)

3、然后依次点击Apache、MySq最前面service、start,启动服务器、数据库。数据库启动不成功,很可能是电脑里面另外安装的数据库A占用了xampp里数据库B的端口,此时手动关掉A
    (右点我的电脑,选择管理/服务与应用程序/服务)


4、修改NetBeans的配置,工具/选项/常规  选择右上角PHP,下方会让你选择php解释器,选择刚安装路径D:\xampp\php\php.exe,成功

5、还有一点需要特别注意:

    此时新建的项目文件路径为D:\xampp\htdocs\PhpProject2,理论上不能更改,涉及访问(我还没尝试过)

6、对于手机:
    内网可通过类似http://localhost/PhpProject1/index.php同样能访问,将localhost改为IP(10.30.30.171)
    外网暂时还没研究,待定

7、对于项目中有MySQL交互的,一定要配置好与数据库的链接,通过Xammp control panel界面右边的shell可进入cmd与mysql进行交互。
    mysql -uroot -ppassword
    use mysql;
    show databases;
    show tables;(单词别写错了)
    select * from tablename;

8、xampp PHPmyadmin自增主键的地方位于:结构/修改列名里  点进去有一个选项A_I打上勾就行,链接        https://www.jianshu.com/p/488bff53e8ca

9、netbeans下PHP调用python失败的原因
    1)python安装配置可能出错  需install for all users(安装好了以后如何查看)
    2) apache里php.ini里安全配置有可能出错
    3)可通过在PHP调用函数里加代码,让出错原因显示出来

    最后发现失败原因:$out = system(" python D:/xampp/htdocs/PhpProject1/test.py 2>&1 $a $b",$states);
    //千万不要写成D:\xampp\htdocs\PhpProject1类似语法,这个搞了一天 有毒!

扫描二维码关注公众号,回复: 4011850 查看本文章

    两种表示路径有什么区别??可研究一下

10、关于system和exec的输出问题
    1)$out=system():
        $out = system()
        print_r($states);
        print_r($out);
        输出:58 0 58
    2)system():
        system()
        print_r($states);
        58 0
    3)exec():
        exec(" python D:/xampp/htdocs/PhpProject1/test.py 2>&1 $a $b",$out,$states);
        print_r($states);
        print_r($out);
        0 Array ( [0] => 58 )Array为json格式
    4)$out=exec()
        $out=exec(" python D:/xampp/htdocs/PhpProject1/test.py 2>&1 $a $b",$states);
        print_r($states);
        print_r($out);
        Array ( [0] => 58 ) 58   (注意此时两者同为输出值,但是格式不同)

11、很重要的一点,调试时,file = sys.argv[1]
                  data = ke.new_data(file+'.wav')
              当路径作为参数传过来时,file两边不用加双引号!不然会出bug

12、如何把php界面的值传给另一个php页面参考:http://blog.sina.com.cn/s/blog_906a5acc0100xq9k.html

13、一定要学会看服务器的Logs,特别是Apache(erorr.logs),有服务器运行错误的原因

14、Ajax的POST中,index.php 中的Ajax的responseText就是save.php(system方法传入参数给Python文件时)中所有的echo输出值

15、将responseText的值显示在网页上:
    alert(request.responseText);//弹窗显示结果,可在save.php里继续更改显示文字
        //将服务器返回结果插入到id=predicted的标签里,还需将结果插入至表单上传服务器,如何插入?
        //https://bbs.csdn.net/topics/110119246
        document.all["predicted"].innerHTML=request.responseText;

此部分为PHP

一个TCP报文除了包含要传输的数据外,还包含源IP地址和目标IP地址,源端口和目标端口。

端口有什么作用?在两台计算机通信时,只发IP地址是不够的,因为同一台计算机上跑着多个网络程序。一个TCP报文来了之后,到底是交给浏览器还是QQ,就需要端口号来区分。每个网络程序都向操作系统申请唯一的端口号,这样,两个进程在两台计算机之间建立网络连接就需要各自的IP地址和各自的端口号。

所以application()函数必须由WSGI服务器来调用。有很多符合WSGI规范的服务器,我们可以挑选一个来用。但是现在,我们只想尽快测试一下我们编写的application()函数真的可以把HTML输出到浏览器,所以,要赶紧找一个最简单的WSGI服务器,把我们的Web应用程序跑起来。

好消息是Python内置了一个WSGI服务器,这个模块叫wsgiref,它是用纯Python编写的WSGI服务器的参考实现。
运行WSGI服务
我们先编写hello.py,实现Web应用程序的WSGI处理函数:

innerHTML在JS是双向功能:获取对象的内容 或 向对象插入内容;
如:<div id="demo">这是内容</div> ,我们可以通过 document.getElementById('demo').innerHTML 来获取id为aa的对象的内嵌内容;
也可以对某对象插入内容,如 document.getElementById('demo').innerHTML='这是被插入的内容'; 这样就能向id为abc的对象插入内容。

document.getElementById("id").value是获取HTML标签中id=“id”的value的方法
可能你这里的id就是表示了这个HTML标签 应该也有赋值
var id = document.getElementById("id")
这个时候两者就是一个意思了 

id名,主要是为JS提供的,JS当中,最快获取标签的方式,就是通过标签的id名去获取
表单元素的name的名字,是为后台服务的(PHP、JAVA、.NET等),在表单提交时,
后台通过name来拿到相应表单元素的value值

pathinfo() 函数以数组或字符串的形式返回关于文件路径的信息。
返回的数组元素如下:
[dirname]:返回文件路径中的目录部分
[basename]:返回文件路径中文件名的部分
[extension]:返回文件路径中文件的类型的部分


Php调用外部程序(shell、可执行程序等),常用的有三个函数:

一、

string system(string $command [,int &$return_var]):执行、输出第一个参数的命令,第二个可选参数保存是否执行的状态

二、

string exec(string $command [, array &$output[, int &$return_var  ]]):第一个参数是命令,执行之后,返回执行程序的最后一行;也可以设置第二个数组参数,返回的所有结果将保存在这个数组中;第三个可选参数是保存是否执行成功的状态
当然,Php调用Python时也是可以向Python传递参数的

方法就是在命令后面直接加上字符串或者变量,相当于就是向命令行输入这些字符串(注意:路径后和每个变量之间需要有空格)

<?php
$a=10;
$b=20;
system("draft.py $a $b");
?>
而在Pyhon中,也有接收命令行参数的方法:sys.argv[]
sys.argv[0]是Python文件存放的路径,之后就是对应的命令行参数了。所以Php中的$a,$b分别对应了Python中的sys.argv[1]、sys.argv[2]:

import sys
print ('a='+sys.argv[1])
print ('b='+sys.argv[2])


<?php
    $var = 6;
    $var1 = 12;
    $l = exec("D:\python3.5\python hah.py  $var $var1",$Array,$ret);
    //exec($String , $Array , $ret)函数有三个参数,$String 表示执行的语句,这里不能直接像Linux系统下一样直接写"python xx.py"而是需要
    //找到python的exe文件的路径 hah.py后面跟了两个参数$var和$var1 表示传给python文件的参数,$Array是json格式的返回集,$ret等于0表示
    //执行成功,等于1表示执行失败。另外!!如果python程序有错误的话,php这边是不会报错的。
    //echo ($l);
    echo ($Array);
?>

绝对路径
比如print的,在这里我只需要$resultData最后一个输出:$res=end($resultData);

Python代码:
import sys
#需要用sys库来接受php传过来的两个参数$var和$var1
 
filename = sys.argv[0]#文件名
v1 = sys.argv[1]#php传过来的变量
v2 = sys.argv[2]
r = {filename:"asd" , v1:"asd",v2:"asd"}
print (r)#这里的输出到php的变量$Array里面去了

三、 

void passthru(string $command [, int &$return_var]):与system函数比较像,不同的是没有返回值,而是直接将结果输出到浏览器上
http://www.wingstudio.org/ShowBlog/297

猜你喜欢

转载自blog.csdn.net/qq_21161993/article/details/83472570