請問怎樣call server side PHP程式?

我一向是用eclipse 來做開發的,它可以讓我同時寫server side程式(如java, php)和javascript,
聽說用angular 來開發前端程式不錯,於是我來試用,我是用VS code 來做開發程式的,
可是我不知道怎樣call server side PHP 程式,即是我明明已經將我的PHP 檔
放在/assets folder 裡, 當我browse 以URL 時:

http://localhost:4200/assets/getCallTreeList.php

browser 只是下載這個PHP檔而不是執行它,
請問是不是ng serve 內置web server 不支援PHP 呢?
如果ng serve 內置web server 不支援PHP,
因為在同一部電腦上的IIS 已經支援PHP,
所以要怎樣才可以將程式"送"到IIS執行呢?

是不是要分開front end 和back end 來開發程式呢?

這是我的service source code:

	import { CallTree } from './CallTree';
import { Injectable } from '@angular/core';
import { HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http';
import { Observable,OperatorFunction } from 'rxjs';
import { map, catchError } from 'rxjs/operators';
@Injectable({
  providedIn: 'root'
})
export class CallTreeService {
  
  constructor(private http: HttpClient){ 

  }
  getActiveCallTreeList():Observable<CallTree[]>
  {  
	var callTreeIdList:string[];
	var callTreeList: CallTree[]=[];
	return this.http.get("/assets/getCallTreeList.php").pipe(
		map((res) => {
		  callTreeIdList=Object.keys(res);
		  for (var i=0;i<callTreeIdList.length;i++)
			  {
			callTreeList.push(res[callTreeIdList[i]]);
		  }
		  return callTreeList;
	  }), catchError(this.handleError));
  }
  handleError(handleError: any): OperatorFunction<CallTree[], any> {
	console.log(handleError)
	throw new Error("Error! something went wrong.");
  }
  
}

我是用VS code 1.37.1,
Angular CLI: 8.3.0
Node: 10.16.3
OS: win32 x64
Angular: 8.2.3

ng serve 當然不支援跑 php, php 是需要一個 web server 去執行。
既然有一個 web server, 當然就會有一個網址可以呼叫,Angular 這邊只要呼叫相對應的 url 即可
至於怎麼設定 IIS,網路上有很多文章可以參考

或者我有點詞不達意,其實我想問的應該是development platform 問題, 因為之前上網爬文時,多數都是教先build app,然後才deploy 去IIS, 我想在開發途中不用做這兩個步驟都能夠看到執行結果,還有解決ng serve 不支援跑 php 的問題,幸運地我找到solution,

  • 首先在 angular.json 內修改outputPath 設定,讓angular 將compiled code放在IIS 下:

      "projects": {
      "Call-tree": {
        "projectType": "application",
        "schematics": {},
        "root": "",
        "sourceRoot": "src",
        "prefix": "app",
        "architect": {
      	"build": {
      	  "builder": "@angular-devkit/build-angular:browser",
      	  "options": {
      		**"outputPath": "D:\\Inetpub\\wwwroot\\Call-tree",**
    
  • 然後執行以下command

    ng build --watch --base-href /Call-tree/

ng build --watch 和 ng serve 功能是一樣的,只是ng build --watch會將compiled file 放到 “outputPath” 裡面,至於" --bash-href /Call-tree/" 就是指定app的base URL為 /Call-tree/,這樣app就能找到相關的file了.

ng build 和 ng serve 這兩者是有差異的, ng build 是輸出實體檔案,而 ng serve 是一切都在記憶體中處理,所以速度會比 ng build 來的快,(每次異動後要重新 compile 的時間差異)

1個讚

多謝師兄指點