Skip to content

Instantly share code, notes, and snippets.

View nmcgann's full-sized avatar

Neil McGann nmcgann

  • UK
  • 22:55 (UTC +01:00)
View GitHub Profile
@nmcgann
nmcgann / s3-signer-test.php
Last active October 9, 2015 06:03
Amazon S3 Version 4 API request signer script
<?php
//TEST CODE
//Simple example of links to files in a privately accessible s3 bucket being authorised.
//If the link is followed directly a 403 error will be returned with an xml error page.
//Instead jquery catches the click and creates an authorisation for the request assisted by
//a server that holds the access keys. The region, bucket and key are extracted and then a
//server-side authorisation query string is requested, appended to the link href and then the
//file is requested from s3.
// Bucket needs CORS turning on (for GET) and s3:GetObject permission needs to be present.
?>
@nmcgann
nmcgann / Dbpdo.php
Created November 23, 2015 21:57
PDO class to include timing and logging. Tested with mysql and mssql
<?php
/**
* dbpdo.php
*
* Wrapper class for PDO to handle connecting to different types of db (mssql and mysql).
* Also handles mssql on both windows and linux platforms by using sqlsrv and dblib pdo drivers.
* Adds a logging and timing facility for queries and prepared statements.
* A logging function can be passed to the constructor to capture all calls to the PDO routines.
*
* All normal PDO and PDOStatement functions can be used with no alterations.
@nmcgann
nmcgann / Logger.php
Created November 23, 2015 22:01
Simple Logging class - logs to files only.
<?php
/**
* Logger class.
* Logs to file and defaults to a /logs/ subdirectory under this script location
*
* This is a bit mickey-mouse as loggers go, but helpful.
*
*/
// ------------------------------------------------------------------------- //
@nmcgann
nmcgann / verify.js
Last active February 10, 2017 16:29
Javascript verify class based on using data atttibutes on the form inputs and submit(s). No jquery, just plain js (ES5).
/**
* JS form data verification routine. Uses data attributes on the field:
* "data-verify": regex pattern that must be true for no error.
* "data-error": error message.
* "data-options": options separated by "|". First is regex parameters i/g/m as per the RegExp constructor,
* second is inversion of the test if "not", or "req" if the test must pass and a non-empty field is
* not allowed (both req and not can be used if separated by a ";" or space). Third is the name of a special test function when
* a regex isn't sufficient to do the test. Test fn must be within ValidateForm (or added to the prototype).
* If an option is blank, it can just be left empty e.g. "|req" if there are no regex params, but data-verify
* field must be present so the field is recognised as needing verifying.
@nmcgann
nmcgann / async-scriptloader.js
Created February 10, 2017 16:43
Simple Asynchronous JS script loader. Not clever or modern - just works.
//js async loader
var $$ = $$ || {};
$$.asyncScriptLoader = function (url) {
//get currently loaded scripts
var allScripts = document.getElementsByTagName('script'),
alreadyLoaded = false;
function onLoad(){}; //url is parameter
function onError(){}; //url is parameter
@nmcgann
nmcgann / pdo_mysql_session.php
Last active February 10, 2017 16:49
PHP Mysql session handling class using PDO. Includes row locking on reads to prevent ajax race condition issues. Needs php >= 5.4.
<?php
/**
* Mysql DB Session class with PDO
*
* Uses row locking to handle concurrent ajax access
*
* Requires a PDO db connection to be handed to the session constructor.
*
* Table:
*
@nmcgann
nmcgann / vultr_prov.sh
Created March 12, 2017 18:56
Provision and fix the Vultr LAMP stack (Centos 6). Adds PhpMyAdmin and fixes the broken .htaccess files due to fcgi config (as of March 2017)
#!/bin/bash
#Provision the vultr Centos6 LAMP stack as it is a bit broken as standard
#update and fetch missing things
yum update -y
yum install -y php56u-bcmath php56u-imap php56u-intl php56u-pecl-memcache
#disable opcache for development
perl -pi -e 's/^opcache.enable=1/opcache.enable=0/' /etc/php.d/10-opcache.ini
@nmcgann
nmcgann / lightsail_install_memcache.sh
Created March 14, 2017 08:41
bash script to install memcache on AWS lightsail LAMP stack (Mar 2017)
#!/bin/bash
#install memcache on AWS lightsail bitnami
#memcache (no "d") is handy for cross platform testing as it will work on windows
#WAMP etc. where the memcached version does not appear to have a windows port)
#(lightsail lamp has the build environment gcc etc. already installed)
#memcache version
VERSION='3.0.8'
cd /root/bitnami
@nmcgann
nmcgann / get_host_url.php
Last active March 14, 2017 21:42
PHP function to automatically get a host url from $_SERVER variables to enable creation of absolute links etc. (Apache)
<?php
//e.g.semi-colon separated define list of all allowable hosts (does not need to show sub-domains - works automatically)
//$valid_hosts = 'first-host.com;second-host.com';
//create absolute url for page address - quite tricky to make this work on linux / windows and shared hosting and also
//php built-in web server.
//Constructed URL ends up in a trailing slash with the $target parameter appended.
//defaults to not checking a valid host list unless one is supplied
function get_host_url($target = '', $valid_hosts = '*'){
// Get HTTP/HTTPS (the possible values for this vary from server to server)
@nmcgann
nmcgann / mysql_backup.class.php
Last active March 17, 2017 06:58
PHP Class to dump a Mysql/Maria database to a string. Includes views, triggers, procedures and functions. (Improved!)
<?php
/*
* PHP backup class. Based on an old script updated to use mysqli_ routines.
* Extended and bugfixed - now handles NULL's, doesn't quote numbers, handles utf-8,
* creates multiple inserts and breaks to a new one after a defined number, creates gzip
* or zip files, generates foriegn key disable and table lock/unlock statements.
* Handles Views, Triggers, Procedures and Functions.
* Optionally removes DEFINER from views/procs/funcs and DB names from views.
*
* Thanks to Phil Rodgers (https://github.com/placeposition) for spotting the field type