User Tools

Site Tools


programming:php

This is an old revision of the document!


PHP Programming

PHP is a web-native language that essentially embeds itself within HTML.

While the wiki is still being built, refer to: https://www.devdungeon.com/topics/php and https://github.com/DevDungeon/Cookbook/tree/master/php

Installing

In Debian and most Linux distributions, it's as simple as using the package manager:

apt install php php-pdo-sqlite
php --version
 
# For Apache2 httpd
apt install apache2 libapache2-mod-php

See the web servers page for more info on configuring

Built-in webserver

PHP has a built-in web server that is useful for local developing and testing.

# Serves current directory, no directory listing
php -S localhost:9999
 
# Specify path to serve
php -S localhost:9999 -t /path/to/serve

Phar files

Phar files are essentially tarballs of PHP content. In addition to the convenience of having a single .phar containing many files, the phar can be marked executable and treated like an executable Java JAR. See the official phar documentation.

It can be treated as a special protocol for referencing files like this: phar://myphar.phar/file.php You can read or include files in this manner.

Composer

Composer is an optional tool for managing depedencies.

See: https://www.devdungeon.com/content/php-composer-basics

Code examples

Here are some snippets for reference.

Hello world

Here is a simple “Hello world” application.

hello.php
<?php
echo "Hello, world!";

PHP info

php_info.php
<?php
// Show all PHP configs/extensions
phpinfo();

Show all errors

show_errors.php
<?php
// Add this to turn on all errors (disable in production!)
 
// The ini_set options could also go in php.ini
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Functions

functions.php
<?php
 
function greet($name, $greeting="Hi") {
  print("$greeting, $name!");
}
 
greet("NanoDano");  // Hi, NanoDano!

Include a PHP file

load_lib.php
<?php
// Pick one method for loading another PHP file
include('my_lib.php'); // Include if available
require('my_lib.php'); // Fail if not available
require_once('my_lib.php'); // Ensure not loaded twice

Forms

form.php
<html>
<body>
 
<?php
if ($_POST['something']) {
  print("Received: " . $_POST['something'];
}
 
<form method="post">
  <input type="text" name="something" id="something" />
  <br />
  <button type="submit">Submit</button>
</form>
 
</body>
</html>

Redirect

Use the PHP function header() to send a new Location header.

redirect.php
<?php
// Set HTTP header to redirect
// Must go before any content is output
header('Location: /'); // Defaults to 302
 
// Or specify status code
//header('Location: /', TRUE, 301);
 
exit; // If you want to ensure nothing else gets output

SQLite database

This example is for SQLite3 using the PHP PDO_SQLITE, but essentially the same for other databases too.

apt install php-pdo-sqlite

sqlite_example.php
<?php
 
// Connect (Use `sqlite::memory:` for memory-only)
$db = new PDO('sqlite:'.__DIR__.'/bookmarks.sqlite3');
 
// Create table
$db->exec(
"CREATE TABLE IF NOT EXISTS urls (
    url TEXT,
    notes TEXT
    )"
);
 
// Prepared statement for changes
$query = $db->prepare('INSERT INTO urls (url) VALUES (?)');
$query->execute(['https://www.devdungeon.com/']);
 
// Query
$result = $db->query('SELECT * FROM urls');
foreach ($result as $result) {
    print($result['url'].'<br />');
}
 
$db = null;  // Close it

libgit2

Crop images

crop_image_gd.php
// Crop using GD (`apt install php-gd`)
$src_img = imagecreatefrompng('300x200.png');
if(!$src_img) {
    die('Error when reading the source image.');
}
$thumbnail = imagecreatetruecolor(200, 200);
if(!$thumbnail) {
    die('Error when creating the destination image.');
}
// Take 200x200 from 200x200 starting at 50,0
$result = imagecopyresampled($thumbnail, $src_img, 0, 0, 50, 0, 200, 200, 200, 200);
if(!$result) {
    die('Error when generating the thumbnail.');
}
$result = imagejpeg($thumbnail, '200x200gd.png');
if(!$result) {
    die('Error when saving the thumbnail.');
}
$result = imagedestroy($thumbnail);
if(!$result) {
    die('Error when destroying the image.');
}
crop_image_imagick.php
// Crop image using Imagick (`apt install php-imagick`)
$inFile = "300x200.png";
$outFile = "200x200_imagick.png";
$image = new Imagick($inFile);
$image->cropImage(200,200, 50,0);
$image->writeImage($outFile);

TCP sockets

tcp_server.php
<?php
$socket = stream_socket_server("tcp://192.168.1.5:8000", $errno, $errstr);
if (!$socket) {
  echo "$errstr ($errno)\n";
  die('Could not create socket');
}
 
while (true) {
  while ($conn = stream_socket_accept($socket, -1, $peername)) {
    fwrite($conn, 'The local time is ' . date('n/j/Y g:i a') . "\n");
    echo "Connection received from: $peername\n";
    fclose($conn);
  }
}
 
fclose($socket);
programming/php.1618365478.txt.gz · Last modified: 2021/04/14 01:57 by nanodano