① golang 多人開發怎麼保證源碼安全
隨著php有著越來越深入的了解,以及遇到越來越多的不同業務時,使用PHP總會讓我有一種莫名的無力感。當然,並不是我一個人在使用PHP的時候遇到了問題。事實上,每個略微有一些經驗,接觸過一些需求的人都會有同樣的困惑。各種配合LAMP(或者LNMP?)架構的後端技術也因此被發明或被發現,進而整合到PHP的開發的技術體系中。從簡單的Memcached作為數據中轉,cron後端定時處理;到Gearman、RabbitMQ這些隊列神器;最近Laruence甚至封裝了利用libcurl的非同步特性實現並發RPC調用的yar擴展。幾乎整個社區都在尋找PHP的摩西之路。好吧,說了一大堆,回歸主題。之前我寫了一篇英文練筆《》,獲得不少國際友人的關注。排除拼寫和語法被他們詬病外,主要是有許多朋友覺得我沒把事情說清楚。所以這里我用母語重新聊聊這個事情,只是這些國際友人什麼時候能學會閱讀中文呢?;)Go或者Golang,是由Google支持的快速、一致、穩定的,有活躍的社區支持的開源編程語言。越來越多的應用選擇使用Golang進行構建。雖然RobPike說「…我們希望C++程序員來了解Go並作為一個可選的語言…」,不過我真得認為:PHPer應當學習Golang!接下來我們就來談談原因。容易學習PHP相當容易學習。Golang也是!在這點上,一群大老外對我的觀點進行了猛烈的抨擊。他們認為我羞辱了PHPer,說得好像只有簡單的東西PHPer才能學會一樣。但是,這難道不是事實嗎?或者換個說法:像我一樣的喜歡PHP的人,或多或少都會更喜歡簡單的東西。PHP的語法接近C族編程語言(C/C++/java等等)。如果有這些語言的經驗,在第一次遇到PHP的時候立刻就能開始上手編寫代碼。在我看來,編寫PHP代碼或許更加考驗程序員的記憶力,而不是智力(當你面對各種不同風格的函數定義、各種擴展的特殊約定時,你一定會相當認同我的觀點)。Golang同樣是一個C族編程語言。呃,或者有一些不同吧。例如關鍵字「for」,功能上和PHP的接近,但是沒有括弧。條件語句「if」同樣無需括弧。可以閱讀EffectiveGo了解內容。Golang只有3025個關鍵字和47個操作符號、分隔符號或其他特殊標記。記住這些標記確實不需要什麼特別的努力。精巧的類型系統相當容易使用。實用的,具有方法的結構體類型代替了笨重的對象系統。介面的設計是Golang中我最喜歡的部分。當完成了《Go指南》的學習之後,利用PHP積累的經驗,立刻就可以開始使用Golang處理一些簡單的任務。容易使用PHP腳本是由SAPI組件進行解析執行的,如Web伺服器模塊、PHP-FPM或者CLI。部署PHP所需要的全部東西就是一個SAPI環境。配置這個環境對於新手來說可能是學習PHP過程中最為困難的部分。所有的Golang代碼會編譯和鏈接為本地碼。所以除了編譯環境,執行時無需再為其進行任何特別的部署。對比PHP環境的配置,這要簡單很多。你真得認為配置PHP環境很復雜嗎?我不覺得,真的!而配置Golang編譯環境比那還要簡單點。我確信已經有大量的Golang相關的書籍、文章介紹過如何進行編譯環境的配置了。為了更加清晰,我這里梳理一下思路。有三個步驟需要處理:下載Golang的源代碼;根據《[翻譯]Go環境設置》的提示設置環境變數;運行源代碼src目錄中的all.bash。或者一步到位:使用二進制包進行安裝。然後就會得到一個叫做「go」的工具集合。使用「go」工具和使用PHP的CLI工具一樣簡單。《[翻譯]go工具》對此進行了詳細的解釋。PHP的迷思如果一個編程語言容易學習和使用,我們是不是就應當學習它呢?有許多容易學習和使用的編程語言。難道要把它們都學一遍?答案是顯然的:NO!但是呢?只是因為它很酷!是的,我在開玩笑,但是這是真的。無論如何先從PHP自身談起吧。PHP「原本是為了開發動態的Web頁面而設計的伺服器端通用語言(Wikipedia)」。PHP一個重要的特性就是可以嵌入到HMTL中。代碼編寫在「」標簽內;HTML寫在標簽外。它有一個強大的擴展系統。擴展使用C調用ZendAPI編寫。數據的處理實際上要利用這些擴展完成。在我看來,PHP是世界上最好的模板語言。但是當積累了一些PHP的經驗,並且開始面對一些更加復雜的Web應用時,你一定會對PHP產生一種無力的感覺。它沒有內建的並行機制,沒有線程、進程(你真得認為那個簡陋的進程式控制制可以不加改造的用在高並發的生產環境?),或者其他某「程」。一個慢數據源可以阻塞整個頁面的處理。消息隊列、緩存、代理……系統開始不僅僅是PHP這么單純,還包括了許多服務和系統組件。這時,PHP只處理很少的業務邏輯,成為真正的模板語言了。PHPer們總是在尋找解決這一問題的法,如「PHPmultithread」或者PHPRPC並發框架。我很難說哪種會更好一些。不過我肯定你會需要選擇一些編程語言用於後端工作的開發。就我自己的經驗,我嘗試過C(一直在和malloc/free進行搏鬥)/Java(陷入到了jar地獄中)/python(從來沒能做到Pythonic不說,還總是在錯誤的類型中打轉)……如果想要獲得性能,就得同內存管理進行搏鬥;如果用GC,就得部署和調優VM;當獲得便利性的時候,同時也是走在刀尖上,一個小錯誤就引起巨大的災難……每個都有優勢,同樣每個都有問題。好吧!現在回到Golang!Golang有GC,無需關心內存管理(或者可以用較少的精力去關注它)。代碼被編譯為本地碼,因此「cp」和「mv」就是部署Golang編寫的應用所需要的全部工具。噢,我剛才已經說過了,Golang是一個具有靜態類型系統的編譯語言。所以你沒有機會弄亂變數的類型。當然,PHPer應該學習Golang的一個重要原因是「轉到Go是因為他們並未放棄太多的表達能力,但是獲得了性能,並且與並發共舞(RobPike)」。《WhyNotGo?(英文)》對此進行了深入的分析。我可以分享一些我的經驗:有一個Gearman的worker用於處理後端數據。PHP通過其API連接到Gearman的JobServer向worker發起請求。最初worker是使用python編寫的(還有更加原始的版本,PHP的,但是你能想像它工作起來……唉,不說了……)。這個版本有許多的問題(是我們自己的問題,不關Python的事),但是至少它能工作。後來用Golang重寫了這個worker。為此我開發了Golang的GearmanAPI,並使用ZendAPI編寫了一個在Golang中執行PHP腳本的包。然後將它們放在一起:一個可以執行PHP的Gearmanworker。它已經工作了一段時間了,看起來還不錯!哦,受到Yar的啟發,這里還有一個Golang編寫的RPC合並器,用來合並PHP腳本中的RPC調用。現在還是個玩具,不過或許日後能用得著。這其實是將Golang的channel當作消息隊列來用。我在《Golang:有趣的channel應用》中對此有一些說明。世界真美好啊。謝謝Golang!無論如何,大多數PHPer在進行後端開發的時候都會需要學習一些其他語言。如果你正在尋找,或者已經嘗試了一些其他語言。為什麼不來試試Golang?它真得可以讓你的生活更加輕松和快樂。讓你可以有的時間陪伴你的家人和朋友,吃你愛吃的東西,去你想去的地方。貌似我還是沒說清楚啊?好吧,沒關系,在下個月的中國軟體開發者大會上再跟大家就這個話題做一個探討吧。
② web server 開源 哪些
Axis
Apache Axis 是Apache WebService項目中的子項目,其最初起源於IBM的"SOAP4J",應該屬於最早的一批用於構造基於SOAP應用的Framework。 目前Apache Axis已經發展到了第三代,其核心是一個SOAP處理器,用於開發包括客戶端,伺服器端,SOAP Gateway等各種應指沖伏用。事實上Apache Axis在了1.0版後,其發行版本還包括了完整的J2EE伺服器插件, WSDL支持和生成,TCP/IP監視器等組件,從這個意義上來說Apahce Axis已不僅僅是個SOAP框架了,它包含了除了UDDI外對整個Web Service協議棧(Protocol Stack)的支持。
更多Axis信息
UDDI4J
uddi4j是一個JAVA類庫,提供了一個API來與web服務UDDI注冊中心相結合。UDDI4J得到了HP, IBM和SAP的支持。UDDI是統一描述、發現和集成(Universal Description, Discovery, and Integration的縮寫。
更多UDDI4J信息
WSIL4J
WSIL4J是Java類庫,簡化了對Web服務注冊中心、描述和檢查文檔的處理。
更多WSIL4J信息
WSIF
WSIF是apache的web服務項目的一個子項目,目前版本是2.0,實際上是WSIF被提交給ASF後的第一次發布版本,命名為2.0是和以前非Apache發布的1.x版本相區別。 WSIF提供了一組簡單的API來調用web服務而不需要了解該web服務的實現方式,更深入的說,WSIF是一組基於WSDL文件的API,他調用可以用WSDL文件描述的任何服務。 WSIF中提供的API允許編程者通過WSDL描述內容和web服務調用的抽象層打交道,而不是直接使用SOAP來調用web服務。編程者使用WSIF後就可以使用統一的編程模型來調用web服務而不需要了解該web服務是如何實現和被訪問的。 WSIF 2.0中裡面提供了下列內容的支持: SOAP(可以使用apache SOAP或者axis實現)、本地java類、EJBs、JMS services和其它可以通過java connector訪問的應用。WSIF規定了特別的WSDL擴展使這些資源可以被當成WSDL描述的服務訪問。 WSIF允許通過運行時分析web服務描述的元數據來實現無stub或者動態的調用一個web服務。他允許在運行時將更新的綁定實現插入到WSIF中,他允許調用的服務在運行時之前選擇自己的綁定實現。 WSIF具有以下幾個主要特徵: 1,以WSDL為中心和服務的抽象定義(portType)打交道,隱藏實現細節(協議綁定和服務位置) 2,可插入式允許增加心得提供者使應用可以通過修改WSDL就可以應用新的web服務而不需要修改應用的代碼 3,可擴展很容易使用新的WSDL擴展進行試驗唯攜 4,靈活性很容易定製很容易和JNDI結合使用是服務被提供的位置更加透明
更多WSIF信息
Caucho Burlap
Burlap是一個輕量級的XML RPC協議.利用Burlap Web服務協議使用Web服務不需判凳要大型的框架也不用學習其它協議。
更多Caucho Burlap信息
Xfire
XFire是與Axis 2並列的新一代WebService框架。具有如下:
支持一系列Web Service的新標准--JSR181、WSDL2.0 、JAXB2、WS-Security等 ;
使用Stax解釋XML,性能有了質的提高。XFire採用Woodstox 作Stax實現;
Easily Create Services from POJOs;
易於與Spring框架結合;
靈活的Binding機制,包括默認的Aegis,xmlbeans,jaxb2,castor
更多Xfire信息
SOAP UDDI
SOAP UDDI是一個符合UDDI 2.0的Web服務UDDI注冊中心(registry).利用這個UDDI注冊中心,Web服務開發者可以發布和測試他們的程序在一個安全的,不公開的環境中.
更多SOAP UDDI信息
Caucho Hessian
Hessian也是一個輕量級的,自定義描述的二進制RPC協議.因為它是一個二進制協議,所以它很適合於發送二進制數據而需要使用其它附件來擴展這個協議.
更多Caucho Hessian信息
Ivory
Ivory為Java classes,Avalon服務,和Axis這三者之間相互結合提供了一種簡單的方式.它允許開發soap服務不需要進行Axis通常所要求的WSDD配置,同樣也可以讓Avalon服務使用標准WSDD配置變得簡單.
更多Ivory信息
Crispy
利用Crispy提供的一個統一介面,你可以調用RMI,WebService,REST,XML-RPC,EJB,Burlap,Hessian等其它服務.你不需要知道這些服務是怎樣工作的,要調用的服務類型可在properties文件中定義.遠程調用就像簡單Java對象調用一樣,你可以把Crispy集成到一個SOA(Service Oriented Architecture)或RCP(Rich Client Platform)中.
更多Crispy信息
XINS
XINS是一項規范技術用於定義,創建和調用遠程APIs。當API規范在XML文檔中定義好之後,XINS將會把它們轉換成包括客戶端與服務端的HTML文檔與Java代碼.XINS將與復雜的SOAP技術競爭,因為它被設計得具有簡單性,可擴縮性與可測試性。簡要地說就是:SOA+Java+XML+ 代碼生成-復雜性 => XINS。
更多XINS信息
Restlet
Restlet這個開源項目為那些要採用REST結構體系(Web Service標准:基於直接在HTTP上交換原始XML文檔的思想)來構建應用程序的Java開發者提供了一個具體的解決方案。它由兩部分組成:
1.Restlet API:
支持所有REST概念(資源,表示法,數據,連接器,組件等)。
適合於client與server REST應用程序。
用先進模式匹配的特性來支持URIs as UI的思想。
用Chainlets filter來實現像日記,認證與壓縮等功能。
支持阻塞與非阻塞NIO模式。
2.Noelios Restlet Engine (NRE):
用Noelios Consulting提供的核心包來實現Restlet API。
利用HTTP (通過Jetty連接器)來提供伺服器連接器。
利用HTTP, JDBC,SMTP (通過JavaMail)來提供客戶端連接器。
支持logging (LogChainlet), authentication (GuardChainlet)與cool URIs重寫(RedirectRestlet)。
採用FreeMarker模板來展示JSP頁面等其它功能。
更多Restlet信息
Gomba
Gomba是一組Java servlets集合,它能夠幫助開發者快速構建RESTful Web services。Gomba在內部使用JDBC API同時是關系型資料庫與Web之間的一個介面。Gomba可作為一個動態Web站點的中間層甚至可以作為一個資料庫的報表工具。它的特點:使用http與XML來讀取與寫入數據到一個RDBMS。把SQL結果集表示成XML。使用XSLT來定製XML輸出。使用JSTL+EL來構建動態SQL。支持BLOB與CLOB SQL數據類型。支持Multipart form請求處理。使用XML responses進RESTful錯誤處理。
更多Gomba信息
jSoapServer
jSoapServer這個Java類包可以集成到Java應用程序中為外部程序提供一個SOAP介面。jSoapServer是一個獨立的SOAP伺服器,因此不需要讓Java程序運行在像Tomcat這樣的容器中。它具有的特性包括:
*多線程SOAP伺服器,
*使用線程池,
*支持對gzip內容進行編碼,
*支持對壓縮內容進行編碼,
*支持持久連接(persistent connections:http keep-alive),
*支持SOAP1.1/1.2,
*支持生成WSDL,
*支持生成servlice列表,
*支持SOAP附件(DIME,MIME)。
更多jSoapServer信息
JBossWS
JBossWS實現了一個新的符合JAX-RPC1.1標準的SOAP stack,可用於替代先前的WS4EE和JBoss.NET。它能夠更好的與整個JBoss架構體系相集成。
更多JBossWS信息
soapui
soapui提供一個工具通過soap/http來檢查,調用,實現web service和web service的功能/負載/符合性測試。該工具既可作為一個桌面應用軟體使用,也可利用插件集成到Eclipse,maven2.X,netbeans和intellij中使用。
更多soapui信息
kSOAP2
kSOAP2是一個SOAP web service客戶端包。主要用於資源受限制的Java環境如Applets或J2ME應用程序(CLDC/ CDC/MIDP)。
更多kSOAP2信息
Apache CXF
Apache CXF一個開源的Service框架,它實現了JCP與Web Service中一些重要標准。CXF簡化了構造,集成,面 向服務架構(SOA)業務組件與技術的靈活復用。在CXF中,Service使用WSDL標準定義並能夠使用各種不同的消息 格式(或binding)和網路協議(transports)包括SOAP、XML(通過HTTP或JMS)進行訪問。CXF同樣支持多種model 如:JAX-WS,JBI,SCA和CORBA service。CXF設計成可靈活部署到各種容器中包括Spring-based,JBI,SCA, Servlet和J2EE容器。
更多Apache CXF信息
Jersey
Jersey是JAX-RS(JSR311)開源參考實現用於構建RESTful Web service。此外Jersey還提供一些額外的API和擴展機制,所以開發人員能夠按照自己的需要對Jersey進行擴展。
更多Jersey信息
RESTClient
RESTClient是一個用於測試RESTful Web services的Java客戶端。
更多RESTClient信息
OpenUDDI
OpenUDDI提供一個高性能,易於使用,遵循UDDI v3規范的伺服器與客戶端類庫。伺服器使用Hibernate作為存儲引擎,因此支持大部分SQL資料庫,同時支持還LDAP作為數據存儲。
更多OpenUDDI信息
jrest4guice
一個輕量級的基於Google Guice的Restful服務框架,支持JPA、JAAS、分布式資源對象,對OSGI的支持也在計劃中。
基於Google guice
零配置,服務的自動掃描注冊
非侵入式,用戶不需要實現特定的介面來實現Restful服務
支持Post. Get. Put. Delete操作
靈活的注入(支持上下文環境request/response/session以及參數的自動注入)
根據客戶端要求返回不同類型的數據(xml/json/html)
支持Velocity、Freemarker和Spry模板引擎(當返回類型是text/html時才有效,參見@ViewTemplate)
支持JPA,通過增強的BaseEntityManager實現實體的CRUD
支持事務,通過@Transactional註解聲明事務的類型
支持JAAS,通過@RolesAllowed註解聲明操作所需要的角色
支持分布式資源對象,實現業務邏輯的分布式部署
更多jrest4guice信息
kSOAP
kSOAP是一個SOAP web service客戶端類庫,適用於那些資源受限制的Java環境比如:Applets,J2ME應用程序(CLDC/CDC/MIDP)。
更多kSOAP信息
Metro
Metro是一個高性能,可擴展,易於使用的web service stack/framework。它提供一個一站式解決方案來滿足你所有web service需求。從最簡單的hello world web service到可靠,安全和涉及與.NET服務交互的事務處理web service。
更多Metro信息
sqlREST
sqlREST能夠將關系型資料庫發布為REST風格的Web Service。為任何能夠通過JDBC訪問的資料庫提供Web Service訪問介面,使用HTTP方法GET、POST、PUT和DELETE就能夠查詢,創建,修改和刪除資料庫中的數據記錄。
更多sqlREST信息
GWT-REST
GWT-REST是一個用於GWT應用程序的非同步RESTful客戶端實現。GWT-REST可以與GWT-RPC一起使用或者代替它。
更多GWT-REST信息
Redstone XML-RPC Library
Redstone是XML-RPC規范的一個Java實現,支持任意Java對象的動態代理與序化(Serialization)。 Redstone提供一個XML-RPC客戶端用於訪問XML-RPC服務,和一個XML-RPC servlet用於在web伺服器中將普通的Java對象發布作為XML-RPC服務。Redstone還提供一組序化器(serializer)用於生成可以代替XML-RPC信息的JSON信息,以便從JavaScript也可以訪問XML-RPC服務。
更多Redstone XML-RPC Library信息
PHPRPC
PHPRPC 是一個輕型的、安全的、跨網際的、跨語言的、跨平台的、跨環境的、跨域的、支持復雜對象傳輸的、支持引用參數傳遞的、支持內容輸出重定向的、支持分級錯誤處理的、支持會話的、面向服務的高性能遠程過程調用協議。目前已有以下幾種語言的實現:ASP、ActionScript、Delphi/Kylix、Java、JavaScript、.NET:(支持 .NET 框架下所有的語言(如 C#、VB.NET、VC.NET、Delphi.NET 等)、PHP、Python、Ruby等。
更多PHPRPC信息
JetS3t
JetS3t是一個用於與Amazon S3和CloudFront交互的Java開源工具箱。它為開發人員提供強大、易於使用的API和工具來與S3交互,管理數據存儲。JetS3t主要由5個應用程序組成:
Cockpit:一個GUI工具用於傳輸文件,查看和管理 Amazon S3賬號中的內容。
Synchronize:用於同步用戶計算機上的目錄和Amazon S3帳戶的命令行工具,最適合於在不同的計算機之間同步文件與備份。
Gatekeeper:一個Servlet可以作為訪問Amazon S3帳戶的中介,其它沒有S3帳戶的客戶端可以利用這個Servlet實現上傳,下傳,刪除等操作。
CockpitLite:Cockpit的簡約版本,它通過中介Gatekeeper服務實現所有操作。
Uploader:一個GUI應用程序提一個通過Gatekeeper服務實現上傳文件至S3帳戶中的簡單向導。
更多JetS3t信息
jUDDI
jUDDI是Web Services UDDI(Universal Description、Discovery、Integration)規范的一個Java實現。可以部署在支持Servlet2.3的任何Java應用伺服器上包括:Jakarta Tomcat、JOnAS、WebSphere、WebLogic、Borland Enterprise Server、JRun等。可以與支持ANSI標准SQL的關系型資料庫(MySQL、DB2、Sybase、JDataStore、HSQLDB等)相結合使用。 易於與現有的驗證系統相集成。
③ 基於ICE的PHP與java間的通信
PHP與JAVA融合的開發環境
一.系統環境
1.初始安裝
防火牆開放介面:21,22,80,2401,8009,10000,eth0
Redhat linux 9.0
Development Tools
Network Servers
VSFtp
CVS-1.11.2-10
MySQL 3.23.54
2.包安裝
JDK 1.5
下載地址:http://www.netshine.com.cn/linux/j2sdk-1_4_2_04-linux-i586.rpm
Tomcat 5.0.19
下載地址:http://www.netshine.com.cn/linux/jakarta-tomcat-5.0.19.tar.gz
3.腳本安裝
Webmin 1.110
下載地址:http://www.netshine.com.cn/linux/webmin-1.110.tar.gz
ZendOptimizer 2.5.1
下載地址:http://www.netshine.com.cn/linux/ZendOptimizer-2.5.1-Linux_glibc21-i386.tar.gz
4.手工編譯
Apache 2.0.49
下載地址:http://www.netshine.com.cn/linux/httpd-2.0.49.tar.gz
PHP 4.3.5
下載地址:http://www.netshine.com.cn/linux/php-4.3.5.tar.gz
JK 2-2.0.4
下載地址:http://www.netshine.com.cn/linux/jakarta-tomcat-connectors-jk2-src-current.tar.gz
5.客戶機環境
Windows XP Professional
Absolute Telnet 3.0
Zend Encoder
Macromedia Dreamweaver MX 2004
Borland JBuilder 9 Enterprise
WinCVS 1.3
下載地址:http://www.netshine.com.cn/linux/WinCvs13b17.zip
二.系統安裝
啟動Linux安裝光碟,安裝基本系統:FTP、開發工具和MySQL3.23.54。如果你是手工編譯安裝MySQL,要記得以後在編譯PHP等程序時要指明MySQL的具體路徑,否則會因找不到路徑而導致編譯出錯。
三.安裝webmin1.110
用Webmin來配置系統,傻瓜化,可以節省不少力氣,所以一般我都先安裝它。安裝過程很簡單,執行setup.sh腳本後照提示一步一步來就可以了。
# cd webmin*
# ./setup.sh
四.安裝JDK1.5
1.編輯如下三個文件,沒有指明全路徑的放在你自己的home目錄就可以。
/etc/profile
JAVA_HOME=/usr/java/j2sdk1.4.2_04
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
CVSROOT=/usr/local/cvsroot
PATH=.:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export JAVA_HOME CLASSPATH CVSROOT PATH
/etc/ld.so.conf
/usr/java/j2sdk1.4.2_04/jre/lib/i386
/usr/java/j2sdk1.4.2_04/jre/lib/i386/server
HelloWorld.java
class HelloWorld
{
public static void main(String[] args)
{
//本文件測試Java環境是否安裝成功。
System.out.println("Hello World!");
}
}
2.執行以下命令:
# rpm -ivh j2sdk*.rpm //安裝JDK包。
# source /etc/profile //重載profile環境。
# ldconfig //創建動態鏈接庫緩存文件。
# javac -d . HelloWorld.java //編譯測試文件。
# java HelloWorld //運行程序測試安裝是否成功。
五.安裝Apache
# tar xvzf httpd* //解壓源碼包。
# cd httpd* //進入安裝目錄。
# ./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=most --enable-rewrite
# make;make install //編譯並安裝。
說明:
--enable-so選項:讓Apache可以支持DSO模式,注意,我們在這里採用的是Apache2.0的語法。如果你的Apache是1.3版本,應改為--enable-mole=so。
--enable-mods-shared=most選項:告訴編譯器將所有標准模塊都編譯為DSO模塊。你要是用的是Apache1.3,改為--enable-shared=max就可以。
--enable-rewrite選項:支持地址重寫功能,使用1.3版本的朋友請將它改為--enable-mole=rewrite。
六.編譯安裝PHP
1.執行命令
#tar xvzf php* //解壓源碼包
#cd php* //進入PHP安裝命令
#./configure --prefix=/usr/local/php --with-mysql --with-apxs2=/usr/local
/apache/bin/apxs --with-java=/usr/java/j2sdk1.4.2_04
#make;make install //編譯並安裝
#cp php.ini-dist /usr/local/php/lib/php.ini //復制php配置文件
#cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429 //extensions目錄
#ln -s java.so libphp_java.so //建立連接,忘記了會出錯哦
#cd Zend* //進入ZendOptimizer目錄
#./install //安裝PHP加速器
說明:
--with-apxs2=/usr/local/apache/bin/apxs是Apache2的語法,1.3版本的用戶請使用--with-apxs=/usr/local/apache/bin/apxs。
2.編輯下面三個文件
/usr/local/apache/conf/httpd.conf
LoadMole php4_mole moles/libphp4.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
AddDefaultCharset gb2312
/usr/local/apache/htdocs/test.php
<?php
//本程序測試PHP的JAVA環境是否可用,
代碼是從http://www.php.net/manual/en/ref.java.php摘錄下來的。
// get instance of Java class java.lang.System in PHP
$system = new Java('java.lang.System');
// demonstrate property access
echo 'Java version=' . $system->getProperty('java.version') . '<br />';
echo 'Java vendor=' . $system->getProperty('java.vendor') . '<br />';
echo 'OS=' . $system->getProperty('os.name') . ' ' .
$system->getProperty('os.version') . ' on ' .
$system->getProperty('os.arch') . ' <br />';
// java.util.Date example
$formatter = new Java('java.text.SimpleDateFormat',
"EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz");
echo $formatter->format(new Java('java.util.Date'));
?>
/usr/local/php/lib/php.ini
register_globals=On
[Java]
java.class.path=/usr/local/php/lib/php/php_java.jar:/home/jim/myclass
java.home=/usr/java/j2sdk1.4.2_04
java.library=/usr/java/j2sdk1.4.2_04/jre/lib/i386/libjava.so
java.library.path=/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429
extension_dir=/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429
extension=libphp_java.so
注意:
(1).如果你剛剛從以前老版本的PHP轉換到新版本,可能會發現你的PHP程序很多都不能用了。別緊張!把register_globals打開就一切正常啦!這是因為老版本的PHP,它的register_globals默認是開著的,而新版本,卻把它關了的緣故。
(2)./home/jim/myclass是我存放JAVA組件的路徑,你可以根據實際情況修改,但是為了安全起見,可不要放在web目錄下哦。
④ 請教一下java和php協同開發的方法
引用
因為在做垂直搜索工作中,使用的是java編寫的一個搜索類庫。做垂直搜索,很多實用要使用到配置。當搜索的信息量大時,網站的更新。搜索程序的配置維護是一個不可忽視的問題。所以用了php做網頁,提供配置界面,這樣就可以不用直接修改配置文件或是配置資料庫表。當把配置信息配置好了,我們需要檢測配置是否正確,因為使用的是java程序,所以檢測配置的正確與否使用的也是java程序來檢測。這里就存在一個問題,就是需要把php頁面上的信息傳入到java程序中去檢測。這個時候就需要php和java通信了。下面我就來介紹下怎麼使php跟java通信(當然,你也可以使用類似webservice等技術)也就是php中調用java程序。 php要調用java程序:需要以下准備,php程序,java程序,還有就是shell程序或是bat程序。下面分別介紹下在linux伺服器下php調用java程序和在windows伺服器下調用java程序。前提是php,apache,jdk的環境都已經配置好。
一 在linux下php調用java程序是通過shell文件。分別是以下三個文件: test_shell.php test_shell.java test_shell.sh 他們的源代碼如下:
1.test_shell.java程序代碼
public class test_shell {
public static void main(String[] args) {
System.out.println("你輸入的參數是:"+args[0]+"t"+args[1]);
}
}
2.test_shell.php程序代碼
<?php
/*
* 該函數是用來執行shell命令的,其實還可以使用:exec(),system(),
* popen()和pclose(),passthru() 函數。最長用的是前面兩個和例中使
* 用的shell_exec()。
*/
$args1="我喜歡你";
$args2="我很愛你";
// 注意空格
$r=shell_exec("./test_shell.sh $args1 $args2");
echo $r;
?>
3.test_shell.sh程序代碼是
#!/bin/sh
JAVA_HOME=/usr/local/jdk
CLASSPATH=.:/usr/local/jdk/jre/lib/rt.jar:/usr/local/apache/htdocs/test_shell/test_shell.class
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME CLASSPATH PATH
cd /usr/local/apache/htdocs/test_shell
java test_shell
#shell代碼結束
以下是三個程序的存放路徑和運行次序。
1.三個文件都必須在同一目錄下,比如在/usr/local/apache/htdocs/test_shell/下,不然php很難調到java程序。
2.把test_shell.java程序編譯成test_shell.class,然後把test_shell.class文件存放到CLASSPATH中。如果系統配置了那些環境變數,這里在配置一次是沒有壞處的,也不會影響配置好的系統環境變數。這里設置的好處是當沒有配置jdk環境配置,只有jre時,則需把jre放到/usr/local/jdk下就以。
二、下面先介紹在windows伺服器下,php調用java程序是通過bat文件來的。分別是以下三個文件: test_bat.php test_bat.java test_bat.sh 他們的源代碼如下:
1.java程序
public class test_bat {
public static void main(String[] args) {
System.out.println("你輸入的參數是:"+args[0]+"t"+args[1]);
}
}
2.test_bat.php程序代碼
<?php
/*
* 該函數是用來執行shell命令的,其實還可以使用:exec(),system(),
* popen()和pclose(),passthru() 函數。最長用的是前面兩個和例中使
* 用的shell_exec()。
*/
$args1="我喜歡你";
$args2="我很愛你";
// 注意空格
$r=shell_exec("./test_shell.sh $args1 $args2");
echo $r;
?>
3.test_bat.sh程序代碼是
@echo off
set path=%path%;%cd%jrebin
set CLASSPATH=.;%cd%jrelibrt.jar;%cd%test_bat.class
java test_bat %1 %2
#bat代碼結束
1.三個文件都必須放在同一目錄下,比如在/usr/local/apache/htdocs/test_bat/下,不然php很難調到java程序。
2.把test_bat.java程序編譯成test_bat.class,然後把test_bat.class文件存放到CLASSPATH中。如果系統配置了那些環境變數,這里在配置是沒有壞處的,也不會影響配置好的系統環境變數。這里設置的好處是當沒有配置jdk環境配置,只有jre時,則需把jre放到跟跟test_bat.java同一目錄下就行了。
三、上面兩個例子中,test_shell.sh用的絕對路徑,test_bat.bat是用的相對路徑。不管是絕對還是相對,只要路徑對了就行了。
⑤ 求教json的有關問題,google庫gson的bug有關問題
求教json的有關問題,google庫gson的bug有關問題
復雜 json 數據類型還是用 Hprose 傳遞比較好,gson 有 bug
Hprose 是在PHPRPC的爛或基礎上重新設計的全新的跨平台、跨語言的高性能遠程對象服務擴展,具有更快、更強、更節省帶寬、更安全、更易學易用等特
性。Hprose與PHPRPC相比,通訊效率信歷正更高,帶寬佔用更低,開發效率更快、更靈活。目前支持的編程語言包括Java、C#(以及其它.net語
言,例如VB.net)、Delphi、Javascript、ActionScript、ASP、PHP、滑悔Ruby、Python等。
⑥ 為什麼大型網站前端使用 PHP 後台邏輯用 Java
最近糾結了一下,如果開發一個大型的網站,我到底應該使用php還是jsp,後台到底使用php還是用java,我的選擇要麼是php要麼是java,因為我喜歡linux、unix,當然window平台也必須支持,以便哦的妹紙可以查看。這就要求用一些跨平台相當好的軟體+工具+語言,所以選擇只能是這么幾個。最後我的決定是php+java,一個前台一個後台,理由如下: php和java在開源社區的活躍度嚴重超過了其他的語言,使用人數也都是相當之多;活躍的開發工程師們能夠給我幫助,且這倆都能很好的跨平台,不用花費大量的人力物力去維護 我也做過一個物聯網的網關網站,比較復雜,當時採用的是jsp+java,復雜程度可想而知,單單說開發過程,網站部分繁瑣,每次想查看結果運行網站的時候還需要重新打包部署一下,嚴重影響了哦的開發效率,每天的時間都是在等待(因為網站比較復雜,打包部署需要浪費一些時間)。相對來說呢,php就沒有了,php靈活,好學,上手快,容易悶態慎修改,容易發布,關鍵是熱部署,這個真讓哦眼睛大亮。當然看待任何事物都需要兩種眼光,php也會有缺點,比如沒有太好的開發IDE,所以拼寫錯誤很正常,且php的sql注入危螞敬險較大點,執行效率不高,安全性不如java。還有一些理由,來自知乎的米米們給的建議: Java的優點則是穩定可靠、運行效率高(尤其是JIT的出現之後差距更大了)、不容易犯錯(強類型、預編譯、必須攔截異常等等),缺點是開發和發布的效率相對較低。盡管優秀的工程師能在一定程度上改變以上的問題,但通常而言,哪能到處都是高手多如狗的夢之隊? 從MVC的層次結構上說,在一般網站項目的開發周期中,需求變更最頻繁、調整最多的是View,其次是Controller,最後是Model。這非常好理解,沒事干誰天天改數據結構?每次版本升級控制結構都要改的啦,或多或少而已。再次是兩者之間的通信,目前RPC技術已經足夠成熟,無論是Web Service/Hessian/RESTful API都能夠讓開發人員專注在功能開發上,而不需要過多的考慮異構平台的差異和通訊的細節。這也就意味著在大公司里同時應用兩種語言的方案並不會引入過多的復雜度和工作量。當然,文檔量的下限倒是因此被拔高了不少,但事實上大部分團隊對此其實都是喜聞樂見的:別每天說文檔重要但沒空了,你不寫其他同事怎麼配合? 靠近用戶的前端,使用PHP能夠更快的完成前端頻繁而瑣碎的更新,自如的應對各種需求的變化。頁面的結構調整、用戶輸入內容的基本驗證、僅只和用戶交互有關的簡單邏輯等都很適合使用PHP來開發,甚至可以通過類似Smarty等模板技術將其頁面的變動遷移到前端團隊。而基本的業務邏輯和數據的更新採用Java開發,可以有效的提高復用度、提升性能和吞吐能力、規避安全問題等。而開發效率稍有降低換來的是可維護性的提升,發布速度慢就更不是問題了,因為通常對於基礎業務邏輯的調整往往都是整體修改,並層層測試確認才能發布的。 所以,大型網站前端採用PHP後端採用Java,既好招人又好維護、系統穩定還性能高、連安全性都大大增加。代碼復用、文檔完備度居然也都改善了。讓你在以上這些好處觸手可及時,對架構師知識譜系在廣度上要求更高一些這事根本就不是個問題。
單一方案其實一樣可以做良好的隔離,PHP同樣可以提供Service,而性能問題其實很多時候是演算法和架構的問題而不是語言差異的問題。如Velocity或JSTL等也是很優秀的隔離方案。
但這些方案在高壓力下會暴露出很多問題而體現雙語言的優勢,這些在上面其實都提到,詳細說明一些很難得到改變的點:
1. PHP由於其動態腳本語言的特性,包括類、函數、常量在內都需要在每次請求周期中重復執行後才能建立運行環境;為了保證解析速度而犧牲編譯質量;應用了FastCGI但僅僅只是復用進程處理請求減少fork成本而不是像其他語言,初始化完畢後通過FastCGI的介面獲得數據並以對應介面返回數據等幾個原因,基本上已經不可能在性能上追回當初更爛現在開著JIT牌跑車的Java了。
2. 在PHP里是如此的容易犯錯而難以發現,即使你用實質上出自官方的閉逗Zend Studio,也無法改變一個事實:要保證你的程序高質量無大錯,得要有充足的經驗、足夠的嚴謹、以及——負責任的QA。淘寶的黃裳就曾經拿IDE這事開過玩笑。而玩笑背後的那個原因「缺乏中間件」最近幾年有不少的改善,主要是不少中間件的支持變得更廣泛了從而讓PHP得益,但發展的根源其實還是在C和Java社區。性能和易犯錯則是語言特性造成的技術難點,也是用來換取靈活、快捷的必要代價,很難去指望有根本的改善。
3. Java的世界裡也有JSTL、Velocity和Freemaker等,但和PHP靈活而強大的動態能力、豐富的函數和類庫、輕松的學習成本、多到令人發指的文檔相比,簡直就是渣,就是渣啊!JSTL改完了要重啟Context啊有木有?Velocity不關緩存也要重啟啊有木有?Velocity開緩存性能低下啊有木有?即使這些都不管,調整下某個數據校驗規則要改Action也要重啟有木有?
實際工作中性能問題可以通過良好的架構解決,容易犯錯的問題可以通過框架和規范以及全面的測試來解決,中間件選擇少些但其實該有的都有了,Java的靈活性一樣有不少可供考慮的解決方案哪怕是挫得要死的摘掉節點重啟,完成後重新上節點的策略。
所以,大家會看到單一語言的技術團隊也很多,這個問題的真正考慮還是更多在團隊自身的特點、積累等等。用了雙語言的,也知道自己為什麼要用這些,不用的也清楚自己的路該怎麼走。最後的最後說一句:如果你不知道自己為什麼要用雙語言方案的話,基本上你也就不需要考慮它了
⑦ PHP如何與掃描槍等外設通訊 - PHP進階討論
親,這個東西不是這樣玩兒的。php做出的程式執行後會輸出在瀏覽器上,然後你用掃描槍掃描的資料會寫入到一個Input框裡面,然後提交這個表單,php接到請求之後再去進行資料庫操作就完事了。
因為掃描槍這種東西屬於一種標准輸入裝置和兄,不需要額外的匹配
例如
<input type=text name=code />,當該元素獲得焦點的時候,你可以按鍵盤輸入內容,也可以用掃描槍輸入內容。明白?
有用望採納哦
清楚了.基於簡單php頁面的:方法1掃描的時候發個請求到php頁面(麻煩),php頁面判斷是否時間到了.方法2在客戶端瀏手棚慧覽器使用定時器,請求php頁面,php頁面判斷是否時間到了.基於復雜php頁面的:方法1由一個php頁面,採用socket等方法,模擬一個客戶端,自己呼叫自己,伺服器啟動時畢答初始化訪問一次.基於應用程式的:1多數都有sleep功能,開啟應用程式就可以了,包括php.設定為系統開機的時候自動開始.基於java伺服器的(別得不懂了)1一個在某一個servlet里啟動一個處理執行緒,負責定時處理,在啟動引數里設定自動載入這樣就可以在伺服器每次啟動的時候自動處理了.基於伺服器的:基本上的解決方案都不是以php為核心的.
在php.ini里設定。有java設定的塊。下面是我以前的一個配置做為示例,可以參考一下。[ol][*][*][Java][*]java.class.path = /usr/local/lib/php/php_java.jar:/usr/local/apache/htdocs/java[*]java.home = /usr/local/j2sdk_nb/j2sdk1.4.2/jre[*]java.library = /usr/local/j2sdk_nb/j2sdk1.4.2/jre/lib/i386/libjava.so[*]java.library.path = /usr/local/lib/php/extensions/no-debug-non-zts-20020429[*]extension_dir = /usr/local/lib/php/extensions/no-debug-non-zts-20020429[*]extension = libphp_java.so[*][/ol]Java的兩個安裝包好象都是預設的安裝。PHP要引用的Java Class要存在於java.class.path指定的路徑區域中。記得當時試了大半天才大致搞明白,呵呵。關於呼叫直接參考PHP官方文件里的即可。[[i] 本帖最後由 seraph 於 2006-3-27 16:28 編輯 [/i]]
mbstring 處理多位元組字元集轉換時比較常用
1.執行
yum install php-mbstring
2. 修改php.ini
echo 『extension=mbstring.so』 >>/etc/php.ini #更具php安裝目錄而定
3. 重啟web service
如果是apache: service d restart
原帖由 於 2008-2-17 12:11 發表 [i]弟弟,一般情況下使用單引號,因為這樣不用解析,變數將直接被符值.使用雙引號的,還有一個解析的過程.因為雙引號里邊是可以變數的.例子:$a = 'test'$b = "test{$a}"'$c = "test($object->array['a'][0]}" ... 腳仔,用雙引號同樣可以說到你的效果的,$b = "test".$a;還有一個問題就是你考慮了\n的使用了嗎,當然如果不嫌麻煩或字元多的話我也覺得建議使用單引號
soap、xml(或普通文字)1.soap自己google或網路相關資料。一大把的或者去看看PHPRPC?2.xmlserver:[php][ol][*]'MyNameSpace');[*]$srv->setClass('User');[*]$srv->handle();[*]?>[/ol]client:[ol][*]':localhost/webservice.php','uri'=>'MyNameSpace'));[*]echo $clt->checkpass('aaaa',')?'Suessful':'Failed'[*]?>[/ol]
除了修改php.ini之外,可以在程式的前面新增下面的語句達到你的目的:
error_reporting(E_ALL ^ E_NOTICE);
若有管理許可權一、Window系統下,做計劃任務? ? 例如? ???C:\php5\php.exe -f??二、Linux系統下? ? 例如? ???/usr/local/php/bin/php -f? ?若無管理許可權,只有虛擬空間你至少要訪問一個URL來啟動執行你的任務的指令碼,指令碼頭部加入 ignore_user_abort (true)函式,忽略使用者的中斷請求 ,一直迴圈執行,例如sleep(60 * 30) 半個小時[]
從實際專案中的運用來看,效率還是不理想,如果是大資料的傳遞還是非常慢的。實踐的對策是不要直接用php呼叫lucene建立索引,而是盡量使用非同步呼叫方式,通過事件觸發回撥,這樣可以適當提高執行效率。目前,我已經打算放棄pjb,用ice代替。
你這樣肯定不行的。 php 作為apache 一個mod. apache都restart了, 結果不一定拿得到 檢視原帖>>
求採納
⑧ java如何延時調用web service
延時調用?是指睡眠一定時間在調用ws還是定時調用ws?
如果單純的希望運行某方法一定時間後在調用ws可以使用Thread.sleep
如果是輪詢,每隔一段時間調用ws可以使用以漏盯橋下幾種:
1. spring框架整合的Quartz;
2. 使用ScheledThreadPoolExecutor 調度定時任務返猛;
3. 使用Timer 調則唯度定時任務;
你可以先學習學習timer
⑨ java web項目中 各個系統之間交互的介面如何實現!
在自身項目中 就用Spring來管理.
⑩ 如何選擇數據交換協議
數據交換協議數據交換協議的目的是讓兩個系統進行正確的數據交互。所以幾乎各種開發語言都提供了方便使用的數據交換功能。比如說使用JAVA語言的開發的系統使用 MySQL資料庫存儲數據,就是通過MySQL數據交換協議跟MySQL做數據交換;通過JAVA的RMI可以方便的做跨機器的分布式數據交換,RMI也就是一種數據交換協議。
一般我們在不同的系統、不同的語言之間交換數據的時候,我們會選擇一種通用的交換協議或者自己定義一種容易使用的交換協議。 WebService曾經非常流行, 在Web 2.0時代,輕量級的REST協議又開始受到追捧。那麼究竟在我們的系統中應該選擇什麼樣的碼裂協議呢?
如何選擇數據交換協議選擇什麼樣的協議跟我們的應用場景有很大的關系。我們需要考慮我們開發是否方便、介面是否容易配模斗發布、是否需要考慮帶寬佔用成本、序列化和反序列化的性能、介面培磨協議的擴展性等等。下面我們看下幾個比較常用的交換協議實現。
協議實現跨語言性能傳輸量RPCxml廣泛幾乎所有低很大N(可實現)json廣泛大量一般一般N(可實現)php serializePHPRPC大量一般一般Yhessianhessian大量一般小Ythriftthrift大量高小Yprotobufprotobuf大量高小N(可實現)iceice大量高小YavroApache Avro少量高小Ymessagepackmessagepack
大量高小Y
上面表格列出了一些常用數據交換協議的一些特性的比較。這里並沒有比