不帅 发表于 2015-2-3 23:43:58

PHP网页设计Web开辟匡助:进修http headers的方方面...

要想从事软件开发工作,那么,还有很多的知识要学习,其实,不管是以后想去从事哪个工作,都需要自己去利用空闲的时间去不断的学习新的知识,不断的充实自己。   </p> 不管是做前端仍是做后端,城市不时与HTTP Headers打交道,懂得它无疑对Web开辟有莫大匡助。这篇文章就让我一同来进修下http headers的方方面。
甚么是HTTP Headers

HTTP是“Hypertext Transfer Protocol”的所写,全部万维网都在利用这类协定,几近你在阅读器里看到的大局部内容都是经由过程http协定来传输的,好比这篇文章。
HTTP Headers是HTTP恳求和响应的中心,它承载了关于客户端阅读器,恳求页面,办事器等相干的信息。


示例

当你在阅读器地址栏里键入一个url,你的阅读器将会相似以下的http恳求:

GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: net.tutsplus.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
Pragma: no-cache
Cache-Control: no-cache

第一行被称为“Request Line” 它描写的是这个恳求的根基信息,剩下的就是HTTP headers了。
恳求完成以后,你的阅读器能够会收到以下的HTTP呼应:
HTTP/1.x 200 OK
Transfer-Encoding: chunked
Date: Sat, 28 Nov 2009 04:36:25 GMT
Server: LiteSpeed
Connection: close
X-Powered-By: W3 Total Cache/0.8
Pragma: public
Expires: Sat, 28 Nov 2009 05:36:25 GMT
Etag: "pub1259380237;gz"
Cache-Control: max-age=3600, public
Content-Type: text/html; charset=UTF-8
Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
X-Pingback: http://net.tutsplus.com/xmlrpc.php
Content-Encoding: gzip
Vary: Accept-Encoding, Cookie, User-Agent
<!-- ... rest of the html ... -->
第一行呢被称为“Status Line”,它以后就是http headers,空行完了就入手下手输入内容了(在这个案例中是一些html输入)。
但你检查页面源代码却不克不及看到HTTP headers,固然它们同你能看到的器材一同被传送至阅读器了。
这个HTTP恳求也收回了一些其它资本的吸收恳求,例如图片,css文件,js文件等等。
上面咱们来看看细节。
如何才干看到HTTP Headers

上面这些FireFox扩大可以匡助你剖析HTTP headers:
1. firebug


2.Live HTTP Headers


3. 在PHP中:


[*]getallheaders() 用来获得恳求头部. 你也能够利用 $_SERVER 数组.
[*]headers_list() 用来获得呼应头部.
文章上面将会看到一些利用php示范的例子。
HTTP Request 的布局



被称作“first line”的第一行包括三个局部:


[*]“method” 标明这是何品种型的恳求. 最多见的恳求类型有 GET, POST 和 HEAD.
[*]“path” 表现的是主机以后的途径. 例如,当你恳求 “http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/”时 , path 就会是 “/tutorials/other/top-20-mysql-best-practices/”.
[*]“protocol” 包括有 “HTTP” 和版本号, 古代阅读器城市利用1.1.
剩下的局部每行都是一个“Name:Value”对。它们包括了林林总总关于恳求和你阅读器的信息。例如”User-Agent“就标明了你阅读器版本和你所用的操作体系。”Accept-Encoding“会告知办事器你的阅读可以承受相似gzip的紧缩输入。
这些headers大局部都是可选的。HTTP 恳求乃至可以被精简成如许子:
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: net.tutsplus.com
而且你仍然可以从办事器收到无效的呼应。
恳求类型

三种最多见的恳求类型是:GET,POST 和 HEAD ,从html的编写过程当中你能够已熟习了前两种。
GET:获得一个文档

大局部被传输到阅读器的html,images,js,css, … 都是经由过程GET办法收回恳求的。它是获得数据的次要办法。
例如,要获得Nettuts+ 的文章,http request的第一行凡是看起来是如许的:
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
一旦html加载完成,阅读器将会发送GET 恳求去获得图片,就像上面如许:
GET /wp-content/themes/tuts_theme/images/header_bg_tall.png HTTP/1.1
表单也能够经由过程GET办法发送,上面是个例子:
<form action="foo.php" method="GET">
First Name: <input name="first_name" type="text" />
Last Name: <input name="last_name" type="text" />
<input name="action" type="submit" value="Submit" />
</form>
当这个表单被提交时,HTTP request 就会像如许:
GET /foo.php?first_name=John&last_name=Doe&action=Submit HTTP/1.1
...
你可以将表单输出经由过程附加进查询字符串的体例发送至办事器。
POST:发送数据至办事器

虽然你可以经由过程GET办法将数据附加到url中传送给办事器,但在良多情形下利用POST发送数据给办事器加倍适合。经由过程GET发送大批数据是不实际的,它有必定的局限性。
用POST恳求来发送表双数据是广泛的做法。咱们来吧下面的例子改革成利用POST体例:
<form action="foo.php" method="POST">
First Name: <input name="first_name" type="text" />
Last Name: <input name="last_name" type="text" />
<input name="action" type="submit" value="Submit" />
</form>
提交这个表单会创立一个以下的HTTP 恳求:
POST /foo.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/test.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
first_name=John&last_name=Doe&action=Submit
这里有三个需求注重的中央:


[*]第一行的途径已变成复杂的 /foo.php , 已没了查询字符串。
[*]新增了 Content-Type 和 Content-Lenght 头部,它供应了发送信息的相干信息.
[*]一切数据都在headers以后,以查询字符串的模式被发送.
POST体例的恳求也可用在AJAX,使用法式,cURL … 之上。而且一切的文件上传表单都被请求利用POST体例。
HEAD:吸收头部信息

HEAD和GET很类似,只不外HEAD不承受HTTP呼应的内容局部。当你发送了一个HEAD恳求,那就意味着你只对HTTP头部感乐趣,而不是文档自己。
这个办法可让阅读器判别页面是不是被修正过,从而掌握缓存。也可判别所恳求的文档是不是存在。
例如,假设你的网站上有良多链接,那末你就能够复杂的给他们分离发送HEAD恳求来判别是不是存在逝世链,这比利用GET要快良多。
http呼应布局

当阅读器发送了HTTP恳求以后,办事器就会经由过程一个HTTP response来呼应这个恳求。假如不关怀内容,那末这个恳求看起来会是如许的:


第一个有价值的信息就是协定。今朝办事器城市利用 HTTP/1.x 或 HTTP/1.1。
接上去一个冗长的信息代表形态。代码200意味着咱们的恳求已发送胜利了,办事器将会前往给咱们所恳求的文档,在头部信息以后。
咱们都见过“404”页面。当我向办事器恳求一个不存在的途径时,办事器就用用404来取代200呼应咱们。
余下的呼应内容和HTTP恳求类似。这些内容是关于办事器软件的,页面/文件什么时候被修正过,mime type 等等…
一样,这些头部信息也是可选的。
HTTP形态码



[*]200 用来暗示恳求胜利.
[*]300 来暗示重定向.
[*]400 用来暗示恳求呈现成绩.
[*]500 用来暗示办事器呈现成绩.
200 胜利 (OK)
前文已提到,200是用来暗示恳求胜利的。
206 局部内容 (Partial Content)
假如一个使用只恳求某局限以内的文件,那末就会前往206.
这凡是被用来停止下载办理,断点续传或文件分块下载。
404 没有找到 (Not Found)


很轻易了解
401 未经受权 (Unauthorized)
受暗码回护的页面会前往这个形态。假如你没有输出准确的暗码,那末你就会在阅读器中看到以下的信息:


注重这只是受暗码回护页面,恳求输出暗码的弹出框是上面这个模样的:


403 被制止(Forbidden)
假如你没有权限会见某个页面,那末就会前往403形态。这类情形凡是会产生在你试图翻开一个没有index页面的文件夹。假如办事器设置不答应检查目次内容,那末你就会看到403毛病。
其它一些一些体例也会发送权限限制,例如你可以经由过程IP地址停止禁止,这需求一些htaccess的协助。
order allow,deny
deny from 192.168.44.201
deny from 224.39.163.12
deny from 172.16.7.92
allow from all
302(或307)一时挪动(Moved Temporarily) 和 301 永世挪动(Moved Permanently)
这两个形态会呈现在阅读重视定向时。例如,你利用了相似 bit.ly 的网址延长办事。这也是它们若何获知谁点击了他们链接的办法。
302和301关于阅读器来讲长短常类似的,但关于搜刮引擎爬虫就有一些不同。打个例如,假如你的网站正在保护,那末你就会将客户端阅读器用302 重定向到别的一个地址。搜刮引擎爬虫就会在未来从头索引你的页面。然而假如你利用了301重定向,这就等于你告知了搜刮引擎爬虫:你的网站已永世的挪动 到了新的地址。
500 办事器毛病(Internal Server Error)


这个代码凡是会在页面剧本溃散时呈现。大局部CGI剧本都不会像PHP那样输入毛病信息给阅读器。假如呈现了致命的毛病,它们只会发送一个500的形态码。这时候需求检查办事器毛病日记来排错。
完全的列表
你可以在这里找到完全的HTTP 形态码申明。
HTTP Headers 中的 HTTP恳求

如今咱们来看一些在HTTP headers中罕见的HTTP恳求信息。
一切这些头部信息都可以在PHP的$_SERVER数组中找到。你也能够用getallheaders() 函数一次性获得一切的头部信息。
Host

一个HTTP恳求会发送至一个特定的IP地址,然而大局部办事器都有在统一IP地址下托管多个网站的才能,那末办事器必需晓得阅读器恳求的是哪一个域名下的资本。
Host: rlog.cn
这只是根基的主机名,包括域名和子级域名。
在PHP中,可以经由过程$_SERVER["HTTP_HOST"] 或 $_SERVER["SERVER_NAME"]来检查。
User-Agent

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
这个头部可以携带以下几条信息:


[*]阅读器名和版本号.
[*]操作体系名和版本号.
[*]默许言语.
这就是某些网站用来搜集访客信息的普通手腕。例如,你可以判别访客是不是在利用手机会见你的网站,然后决意是不是将他们引诱至一个在低分辩率下体现优秀的挪动网站。
在PHP中,可以经由过程 $_SERVER["HTTP_USER_AGENT"] 来获得User-Agent
if ( strstr($_SERVER["HTTP_USER_AGENT"],"MSIE 6") ) {
echo "Please stop using IE6!";
}
Accept-Language

Accept-Language: en-us,en;q=0.5
这个信息可以申明用户的默许言语设置。假如网站有分歧的言语版本,那末就能够经由过程这个信息来重定向用户的阅读器。
它可以经由过程逗号朋分来携带多国言语。第一个会是首选的言语,其它言语会携带一个“q”值,来暗示用户对该言语的喜欢水平(0~1)。
在PHP顶用 $_SERVER["HTTP_ACCEPT_LANGUAGE"] 来获得这一信息。
if (substr($_SERVER["HTTP_ACCEPT_LANGUAGE"], 0, 2) == "fr") {
header("Location: http://french.mydomain.com");
}
Accept-Encoding

Accept-Encoding: gzip,deflate
大局部的古代阅读器都撑持gzip紧缩,并会把这一信息呈报给办事器。这时候办事器就会紧缩过的HTML发送给阅读器。这可以削减近80%的文件巨细,以节俭下载工夫和带宽。
在PHP中可使用 $_SERVER["HTTP_ACCEPT_ENCODING"] 获得该信息。 然后挪用ob_gzhandler()办法时会主动检测该值,所以你无需手动检测。
// enables output buffering
// and all output is compressed if the browser supports it
ob_start("ob_gzhandler");
If-Modified-Since

假如一个页面已在你的阅读器中被缓存,那末你下次阅读时阅读器将会检测文档是不是被修正过,那末它就会发送如许的头部:
If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT
假如自从这个工夫以来未被修正过,那末办事器将会前往“304 Not Modified”,并且不会再前往内容。阅读器将主动去缓存中读取内容
在PHP中,可以用$_SERVER["HTTP_IF_MODIFIED_SINCE"] 来检测。
// assume $last_modify_time was the last the output was updated
// did the browser send If-Modified-Since header?
if(isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) {
// if the browser cache matches the modify time
if ($last_modify_time == strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"])) {
// send a 304 header, and no content
header("HTTP/1.1 304 Not Modified");
exit;
}
}
还有一个叫Etag的HTTP头信息,它被用来肯定缓存的信息是不是准确,稍后咱们将会注释它。
Cookie

望文生义,他会发送你阅读器中存储的Cookie信息给办事器。
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar
它是用分号朋分的一组名值对。Cookie也能够包括session id。
在PHP中,单一的Cookie可以会见$_COOKIE数组取得。你可以直接用$_SESSION array获得session变量。假如你需求session id,那末你可使用session_id()函数取代cookie。
echo $_COOKIE["foo"];
// output: bar
echo $_COOKIE["PHPSESSID"];
// output: r2t5uvjq435r4q7ib3vtdjq120
session_start();
echo session_id();
// output: r2t5uvjq435r4q7ib3vtdjq120
Referer

望文生义, 头部将会包括referring url信息。
例如,我会见Nettuts+的主页并点击了一个链接,这个头部信息将会发送到阅读器:
Referer: http://net.tutsplus.com/
在PHP中,可以经由过程 $_SERVER["HTTP_REFERER"] 获得该值。
if (isset($_SERVER["HTTP_REFERER"])) {
$url_info = parse_url($_SERVER["HTTP_REFERER"]);
// is the surfer coming from Google?
if ($url_info["host"] == "www.谷歌.com") {
parse_str($url_info["query"], $vars);
echo "You searched on Google for this keyword: ". $vars["q"];
}
}
// if the referring url was:
// http://www.谷歌.com/search?source=ig&hl=en&rlz=&=&q=http+headers&aq=f&oq=&aqi=g-p1g9
// the output will be:
// You searched on Google for this keyword: http headers
You may have noticed the word “referrer” is misspelled as “referer”. Unfortunately it made into the official HTTP specifications like that and got stuck.
Authorization

当一个页面需求受权,阅读器就会弹出一个上岸窗口,输出准确的帐号后,阅读器会发送一个HTTP恳求,但此时会包括如许一个头部:
Authorization: Basic bXl1c2VyOm15cGFzcw==
包括在头部的这局部信息是base64 encoded。例如,base64_decode(‘bXl1c2VyOm15cGFzcw==’) 会被转化为 ‘myuser:mypass’ 。
在PHP中,这个值可以用$_SERVER["PHP_AUTH_USER"] 和 $_SERVER["PHP_AUTH_PW"] 取得。
更多细节咱们会在WWW-Authenticate局部解说。
HTTP Headers 中的 HTTP呼应

如今让我懂得一些罕见的HTTP Headers中的HTTP呼应信息。
在PHP中,你可以经由过程 header() 来设置头部呼应信息。PHP已主动发送了一些需要的头部信息,如 载入的内容,设置 cookies 等等… 你可以经由过程 headers_list() 函数看到已发送和将要发送的头部信息。你也能够利用headers_sent()函数来反省头部信息是不是已被发送。
Cache-Control

w3.org 的界说是:“The Cache-Control general-header field is used to specify directives which MUST be obeyed by all caching mechanisms along the request/response chain.” 个中“caching mechanisms” 包括一些你ISP能够会用到的 网关和代办署理信息。
例如:
Cache-Control: max-age=3600, public
“public”意味着这个呼应可以被任何人缓存,“max-age” 则标明了该缓存无效的秒数。答应你的网站被缓存降大大削减下载工夫和带宽,同时也进步的阅读器的载入速度。
也能够经由过程设置 “no-cache”指令来制止缓存:
Cache-Control: no-cache
更多概况请拜见w3.org。
Content-Type

这个头部包括了文档的”mime-type”。阅读器将会根据该参数决意若何对文档停止解析。例如,一个html页面(或有html输入的php页面)将会前往如许的器材:
Content-Type: text/html; charset=UTF-8
‘text’ 是文档类型,‘html’则是文档子类型。 这个头部还包含了更多信息,例如 charset。
假如是一个图片,将会发送如许的呼应:
Content-Type: image/gif
阅读器可以经由过程mime-type来决意利用内部法式仍是本身扩大来翻开该文档。以下的例子降挪用Adobe Reader:
Content-Type: application/pdf
直接载入,Apache凡是会主动判别文档的mime-type而且添加适合的信息到头部去。而且大局部阅读器都有必定水平的容错,在头部未供应或毛病供应该信息的情形下它会去主动检测mime-type。
你可以在这里找到一个经常使用mime-type列表。
在PHP中你可以经由过程 finfo_file() 来检测文件的ime-type。
Content-Disposition

这个头部信息将告知阅读器翻开一个文件下载窗口,而不是试图解析该呼应的内容。例如:
Content-Disposition: attachment; filename="download.zip"
他会招致阅读器呈现如许的对话框:


注重,合适它的Content-Type头信息同时也会被发送
Content-Type: application/zip
Content-Disposition: attachment; filename="download.zip"
Content-Length

当内容将要被传输到阅读器时,办事器可以经由过程该头部告诉阅读器将要传送文件的巨细(bytes)。
Content-Length: 89123
关于文件下载来讲这个信息相当的有效。这就是为何阅读器晓得下载进度的缘由。
例如,这里我写了一段虚拟剧本,来摹拟一个慢速下载。
// it"s a zip file
header("Content-Type: application/zip");
// 1 million bytes (about 1megabyte)
header("Content-Length: 1000000");
// load a download dialogue, and save it as download.zip
header("Content-Disposition: attachment; filename="download.zip"");
// 1000 times 1000 bytes of data
for ($i = 0; $i < 1000; $i++) {
echo str_repeat(".",1000);
// sleep to slow down the download
usleep(50000);
}
了局将会是如许的:


如今,我将Content-Length头部正文失落:
// it"s a zip file
header("Content-Type: application/zip");
// the browser won"t know the size
// header("Content-Length: 1000000");
// load a download dialogue, and save it as download.zip
header("Content-Disposition: attachment; filename="download.zip"");
// 1000 times 1000 bytes of data
for ($i = 0; $i < 1000; $i++) {
echo str_repeat(".",1000);
// sleep to slow down the download
usleep(50000);
}
了局就酿成了如许:


这个阅读器只会告知你已下载了几何,但不会告知你总共需求下载几何。并且进度条也不会显示进度。
Etag

这是另外一个为缓存而发生的头部信息。它看起来会是如许:
Etag: "pub1259380237;gz"
办事器能够会将该信息和每一个被发送文件一同呼应给阅读器。该值可以包括文档的最初修正日期,文件巨细或文件校验和。阅读会把它和所吸收到的文档一同缓存。下一次当阅读器再次恳求统一文件时将会发送以下的HTTP恳求:
If-None-Match: "pub1259380237;gz"
假如所恳求的文档Etag值和它分歧,办事器将会发送304形态码,而不是2oo。而且不前往内容。阅读器此时就会从缓存加载该文件。
Last-Modified

望文生义,这个头部信息用GMT格局标明了文档的最初修正工夫:
Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
$modify_time = filemtime($file);
header("Last-Modified: " . gmdate("D, d M Y H:i:s", $modify_time) . " GMT");
它供应了另外一种缓存机制。阅读器能够会发送如许的恳求:
If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT
在If-Modified-Since一节咱们已会商过了。
Location

这个头部是用来重定向的。假如呼应代码为 301 或 302 ,办事器就必需发送该头部。例如,当你会见 http://www.nettuts.com 时阅读器就会收到以下的呼应:
HTTP/1.x 301 Moved Permanently
...
Location: http://net.tutsplus.com/
...
在PHP中你可以经由过程这类体例对访客重定向:
header("Location: http://net.tutsplus.com/");
默许会发送302形态码,假如你想发送301,就如许写:
header("Location: http://net.tutsplus.com/", true, 301);
Set-Cookie

当一个网站需求设置或更新你阅读的cookie信息时,它就会利用如许的头部:
Set-Cookie: skin=noskin; path=/; domain=.amazon.com; expires=Sun, 29-Nov-2009 21:42:28 GMT
Set-Cookie: session-id=120-7333518-8165026; path=/; domain=.amazon.com; expires=Sat Feb 27 08:00:00 2010 GMT
每一个cookie会作为独自的一条头部信息。注重,经由过程js设置cookie将不会表现在HTTP头中。
在PHP中,你可以经由过程setcookie()函数来设置cookie,PHP会发送适合的HTTP 头。
setcookie("TestCookie", "foobar");
它会发送如许的头信息:
Set-Cookie: TestCookie=foobar
假如未指定到期工夫,cookie就会在阅读器封闭后被删除。
WWW-Authenticate

一个网站能够会经由过程HTTP发送这个头部信息来验证用户。当阅读器看到头部有这个呼应时就会翻开一个弹出窗。
WWW-Authenticate: Basic realm="Restricted Area"
它会看起来像如许:
http://www.alixixi.com/program/UploadPic/2010-6/201062612218661.png
在PHP手册的一章中就有一段复杂的代码演示了假如用PHP做如许的工作:
if (!isset($_SERVER["PHP_AUTH_USER"])) {
header("WWW-Authenticate: Basic realm="My Realm"");
header("HTTP/1.0 401 Unauthorized");
echo "Text to send if user hits Cancel button";
exit;
} else {
echo "<p>Hello {$_SERVER["PHP_AUTH_USER"]}.</p>";
echo "<p>You entered {$_SERVER["PHP_AUTH_PW"]} as your password.</p>";
}
Content-Encoding

这个头部凡是会在前往内容被紧缩时设置。
Content-Encoding: gzip
在PHP中,假如你挪用了ob_gzhandler()函数,这个头部将会主动被设置。
翻译来历:http://rlog.cn/?p=521
第1步环境配置好了,你算了进了1小步了,那么第2步呢 就是调出第1个程序 一般都是用hello world,视频教程里面我都做了,hello world

admin 发表于 2015-2-4 06:15:57

刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。

第二个灵魂 发表于 2015-2-9 17:23:34

写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。

再见西城 发表于 2015-2-27 12:41:32

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。

莫相离 发表于 2015-3-9 04:02:39

说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。

山那边是海 发表于 2015-3-16 20:16:46

再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。

海妖 发表于 2015-3-17 18:08:31

,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。

谁可相欹 发表于 2015-3-24 16:34:51

在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、

不帅 发表于 2015-4-6 16:04:02

我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。

飘飘悠悠 发表于 2015-4-7 01:12:05

建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。

活着的死人 发表于 2015-4-13 19:15:27

至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。

愤怒的大鸟 发表于 2015-4-18 00:39:53

你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。

透明 发表于 2015-4-20 02:09:17

做为1门年轻的语言,php一直很努力。

兰色精灵 发表于 2015-4-26 07:56:34

真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,

小魔女 发表于 2015-5-1 18:22:03

先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。

小妖女 发表于 2015-5-6 15:11:09

为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。

小女巫 发表于 2015-6-4 00:13:53

使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的

仓酷云 发表于 2015-6-15 19:34:40

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

若相依 发表于 2015-6-19 15:43:54

写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。

因胸联盟 发表于 2015-6-24 19:01:19

微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。
页: [1] 2
查看完整版本: PHP网页设计Web开辟匡助:进修http headers的方方面...