涉及安裝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類似語法,這個搞了一天 有毒!

    兩種表示路徑有什麼區別??可研究一下

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章