PHP for the Web
PHP Internal Web Server
Command Line Web Server in PHP, useful in testing phase. Limited since handles only one request at a time. Do not use in production.
PowerShell |
---|
| PHP -S <ip:post> # start web server
PHP -S <ip:post> -t /path/to/folder # execute in specified folder at specified address
PHP -S <ip:post> file.php # redirect requests to single file
|
HTTP Methods
Handling of HTTP requests happens using the following global variables:
$_SERVER
: info on request headers, version, URL path and method (dict)
$_GET
: parameters of get request (dict)
$_POST
: parameters of post request (dict)
$_COOKIE
$_FILES
: file to send to web app.
$_FILES
HTML |
---|
| <!-- method MUST BE post -->
<!-- must have enctype="multipart/form-data" attribute -->
<form name="<name>" action="file.php" method="POST" enctype="multipart/form-data">
<input type="file" name="photo" />
<input type="submit" name="Send" />
</form>
|
Files in $_FILES
are memorized in a system temp folder. They can be moved with move_uploaded_file()
PHP |
---|
| if (! isset($_FILES['photo']['error'])) {
http_response_code(400); # send a response code
echo'<h1>No file has been sent</h1>';
exit();
}
if ($_FILES['photo']['error'] != UPLOAD_ERR_OK) {
http_response_code(400);
echo'<h1>The sent file is invalid</h1>';
exit();
}
$path = '/path/to/' . $_FILES['photo']['name'];
if (! move_uploaded_file($_FILES['photo']['tmp_name'], $path)) {
http_response_code(400);
echo'<h1>Error while writing the file</h1>';
exit();
}
echo'<h1>File successfully sent</h1>';
|
$_SERVER
Request Header Access:
PHP |
---|
| $_SERVER["REQUEST_METHOD"];
$_SERVER["REQUEST_URI"];
$_SERVER["SERVER_PROTOCOL"]; // HTTP Versions
$_SERVER["HTTP_ACCEPT"];
$_SERVER["HTTP_ACCEPT_ENCODING"];
$_SERVER["HTTP_CONNECTION"];
$_SERVER["HTTP_HOST"];
$_SERVER["HTTP_USER_AGENT"];
// others
|
$_COOKIE
Cookie Laws
Garante Privacy 8/5/2014
All sites must have a page for the consensus about using cookies.
Cookies are HTTP headers used to memorize key-value info on the client. They are sent from the server to the client to keep track of info on the user that is visiting the website.
When a client receives a HTTP response that contains Set-Cookie
headers it has to memorize that info and reuse them in future requests.
HTTP |
---|
| Set-Cookie: <cookie-name>=<cookie-value>
Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>
Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<seconds>
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>
Set-Cookie: <cookie-name>=<cookie-value>; Path=<path-value>
Set-Cookie: <cookie-name>=<cookie-value>; Secure
Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly
|
Anyone can modify the contents of a cookie; for this reason cookies must not contain personal or sensible info.
When a client has memorized a cookie, it is sent in successive HTTP requests through the Cookie
header.
HTTP |
---|
| Cookie: <cookie-name>=<cookie-value>
|
PHP setcookie docs
PHP |
---|
| setcookie (
string $name,
[ string $value = "" ],
[ int $expire = 0 ], // in seconds (time() + seconds)
[ string $path = "" ],
[ string $domain = "" ],
[ bool $secure = false ], // use https
[ bool $httponly = false ] // accessible only through http (no js, ...)
)
// example: memorize user-id 112 with 24h expiry for site example.com
setcookie ("User-id", "112", time() + 3600*24, "/", "example.com");
// check if a cookie exists
if(isset($_COOKIE["cookie_name"])) {}
|
Sessions are info memorized on the server associated to the client that makes an HTTP request.
PHP generates a cookie named PHPSESSID
containing a session identifier and an hash generated from IP + timestamp + pseudo-random number
.
To use the session it's necessary to recall the function session_start()
at the beginning of a PHP script that deals with sessions.
After starting the session information in be saved in the $_SESSION
array.
PHP |
---|
| $_SESSION["key"] = value; // save data in session file (serialized data)
unset($_SESSION["key"]); // delete data from the session
session_unset(); # remove all session data
session_destroy(); # destroy all of the data associated with the current session.
# It does not unset any of the global variables associated with the session, or unset the session cookie.
|
Session data is be memorized in a file by serializing $_SESSION
. Files are named as sess_PHPSESSID
in a folder (var/lib/php/sessions
in Linux).
It's possible to modify the memorization system of PHP serialization variables by:
- modifying
session.save_handler
in php.ini
- writing as personalized handler with the function
session_set_save_handler()
and/or the class SessionHandler
PHP Web Instructions
http_response_code()
is used to return an HTTP response code. If no code is specified 200 OK
is returned.
header("Location: /route")
is used to make a redirect to another UTL.