├── .editorconfig ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── Vagrantfile ├── composer.json ├── src ├── CustomArrayObject.php ├── InMemoryLogger.php ├── Traits │ ├── ErrorHandlerTrait.php │ └── LoggerTrait.php ├── Validator │ ├── AbstractValidator.php │ ├── ArrayValidator.php │ ├── BooleanValidator.php │ ├── NestedArrayValidator.php │ ├── NumberValidator.php │ ├── RequiredArrayValidator.php │ ├── RequiredBooleanValidator.php │ ├── RequiredNestedArrayValidator.php │ ├── RequiredNumberValidator.php │ ├── RequiredStringValidator.php │ └── StringValidator.php ├── ValidatorResult.php └── Volan.php └── vagrant └── provision ├── composer.sh ├── files └── php.ini └── php.sh /.editorconfig: -------------------------------------------------------------------------------- 1 | ; This file is for unifying the coding style for different editors and IDEs. 2 | ; More information at http://editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | charset = utf-8 8 | indent_size = 4 9 | indent_style = space 10 | end_of_line = lf 11 | insert_final_newline = true 12 | trim_trailing_whitespace = true 13 | 14 | [*.md] 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Contributions are **welcome** and will be fully **credited**. 4 | 5 | We accept contributions via Pull Requests on [Volan](https://github.com/serkin/volan). 6 | 7 | 8 | ## Pull Requests 9 | 10 | - **[PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** - The easiest way to apply the conventions is to install [PHP Code Sniffer](http://pear.php.net/package/PHP_CodeSniffer). 11 | 12 | - **Add tests!** - Your patch won't be accepted if it doesn't have tests. 13 | 14 | - **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date. 15 | 16 | - **Consider our release cycle** - We try to follow [SemVer v2.0.0](http://semver.org/). Randomly breaking public APIs is not an option. 17 | 18 | - **Create feature branches** - Don't ask us to pull from your master branch. 19 | 20 | - **One pull request per feature** - If you want to do more than one thing, send multiple pull requests. 21 | 22 | - **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](http://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting. 23 | 24 | 25 | ## Running Tests 26 | 27 | ``` bash 28 | $ phpunit 29 | ``` 30 | 31 | 32 | **Happy coding**! 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Serkin Alexander 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Light PHP validation library 2 | For everyone who uses MongoDB or other NoSQL solution and cares about what client sends to his/her database and looking for validation library written in PHP. 3 | `Volan` validates array against given shema and provides you with full information about invalid nodes. Can be used with logging so you can see the whole validation process. 4 | 5 | [![Build Status](https://img.shields.io/travis/serkin/volan.svg?style=flat-square)](https://travis-ci.org/serkin/parser) 6 | [![Coverage Status](https://img.shields.io/coveralls/serkin/volan/master.svg?style=flat-square)](https://coveralls.io/r/serkin/volan?branch=master) 7 | [![Scrutinizer Code Quality](https://img.shields.io/scrutinizer/g/serkin/volan.svg?style=flat-square)](https://scrutinizer-ci.com/g/serkin/volan/?branch=master) 8 | [![Latest Stable Version](https://poser.pugx.org/serkin/volan/v/stable)](https://packagist.org/packages/serkin/volan) 9 | [![Total Downloads](https://poser.pugx.org/serkin/volan/downloads)](https://packagist.org/packages/serkin/volan) 10 | [![Latest Unstable Version](https://poser.pugx.org/serkin/volan/v/unstable)](https://packagist.org/packages/serkin/volan) 11 | [![License](https://poser.pugx.org/serkin/volan/license)](https://packagist.org/packages/serkin/volan) 12 | [![SensioLabsInsight](https://insight.sensiolabs.com/projects/c15e651a-4e91-44b3-8b8f-393a0a4ac70b/small.png)](https://insight.sensiolabs.com/projects/c15e651a-4e91-44b3-8b8f-393a0a4ac70b) 13 | 14 | - [Volan](#light-php-validation-library) 15 | - [Installation](#installation) 16 | - [Usage](#usage) 17 | - [Predefined validatorse](#predefined-validators) 18 | - [Custom validators](#custom-validators) 19 | - [Usage with other libraries](#usage-with-other-libraries) 20 | - [Tips](#tips) 21 | - [Allow extra keys in data](#allow-extra-keys-in-data) 22 | - [Allow required fields be omitted](#allow-required-fields-be-omitted) 23 | - [Logging](#logging) 24 | - [PSR compatible class names](#psr-compatible-class-names) 25 | - [Relational structure](#relational-structure) 26 | - [Dependencies](#dependencies) 27 | - [Contribution](#contribution) 28 | - [Licence](#licence) 29 | - [Tests](#tests) 30 | 31 | ## Installation 32 | --- 33 | via Composer: 34 | 35 | ``` bash 36 | composer require serkin/volan dev-master 37 | ``` 38 | 39 | ## Usage 40 | --- 41 | All you have to do is to specify `_type` field for each node. `_type` is a reference to a validation class 42 | 43 | ```php 44 | include 'vendor/autoload.php'; 45 | 46 | $schema = [ 47 | 'root' => [ // Schema must begins with 'root' 48 | 'title' => [ 49 | '_type' => 'required_string' 50 | ], 51 | 'price' => [ 52 | '_type' => 'number' 53 | ], 54 | 'author' => [ 55 | '_type' => 'string' 56 | ], 57 | 'instock' => [ 58 | '_type' => 'required_boolean' 59 | ], 60 | 'info' => [ 61 | '_type' => 'array', 62 | 'isbn' => [ 63 | '_type' => 'string' 64 | ], 65 | 'pages' => [ 66 | '_type' => 'number' 67 | ] 68 | ], 69 | 'comments' => [ 70 | '_type' => 'nested_array', 71 | 'user_id' => [ 72 | '_type' => 'required_number' 73 | ], 74 | 'comment' => [ 75 | '_type' => 'required_string' 76 | ] 77 | ] 78 | ] 79 | ]; 80 | 81 | $book = [ 82 | 'title' => 'The Idiot', // Cannot be omitted 83 | 'instock' => true, // Cannot be omitted and has to be bool type 84 | 'info' => ['isbn' => '978-0451531520'], 85 | // 'price' can be omitted but if present has to be numeric type 86 | 'comments' => [ // Nested array check nested elements 87 | [ 88 | 'user_id' => 1, 89 | 'comment' => 'Good book', 90 | // 'extra_field' => 'bad field' 91 | // By default if key not present in schema validation stops and returns false 92 | ], 93 | [ 94 | 'user_id' => 2, 95 | 'comment' => 'I like it' 96 | ] 97 | ] 98 | ]; 99 | 100 | $validator = new \Volan\Volan($schema); 101 | $result = $validator->validate($book); 102 | 103 | // if $result->isValid() === false you can get full information about invalid node 104 | var_dump($result->getErrorInfo()); 105 | ``` 106 | ## Predefined validators 107 | ### Strings 108 | * `string`: string 109 | * `required_string`: string that has to be present 110 | 111 | ### Arrays 112 | * `array`: array 113 | * `required_array`: array that has to be present 114 | * `nested_array`: array with nested arrays 115 | * `required_nested_array`: array with nested arrays has to be present 116 | 117 | ### Bool 118 | * `boolean`: boolean 119 | * `required_boolean`: boolean that has to be present 120 | 121 | ### Numbers 122 | * `number`: int or float 123 | * `required_number`: int or float that has to be present 124 | 125 | ## Custom validators 126 | If you need extra validators you can create them extending `\Volan\Validator\AbstractValidator` class 127 | * Create folder `src/Volan/Validator` in your library 128 | * Add your custom validator `src/Volan/Validator/mongoid_validator.php`. Example for `mongoid` validator: 129 | ``` php 130 | namespace Volan\Validator; 131 | class MongoidValidator extends AbstractValidator 132 | { 133 | public function isValid($nodeData) 134 | { 135 | return ($nodeData instanceof \MongoId); 136 | } 137 | } 138 | ``` 139 | * Add autoload to composer.json 140 | ``` json 141 | "autoload": { 142 | "psr-4": { 143 | "Volan\\Validator\\": "src/Volan/Validator/" 144 | } 145 | } 146 | ``` 147 | 148 | ## Usage with other libraries 149 | If you want to use other validation libraries with `Volan` it is easy. Let's take a look how it works with [Respect validation engine](https://github.com/Respect/Validation) 150 | ``` php 151 | namespace Volan\Validator; 152 | use Respect\Validation\Validator as v; 153 | 154 | class IntBetween10And20Validator extends AbstractValidator 155 | { 156 | public function isValid($nodeData) 157 | { 158 | return v::int()->between(10, 20)->validate($nodeData); 159 | 160 | } 161 | } 162 | ``` 163 | 164 | ## Tips 165 | ### Allow extra keys in data 166 | If you want allow extra keys in array you can define it in constructor 167 | ``` php 168 | $validator = new \Volan\Volan($schema, $strictMode = false); 169 | ``` 170 | 171 | ### Allow `required` fields be omitted 172 | In mongoDB when you update just several fields in collection you cannot pass validation cause required fields may be missing. 173 | You can tell validator consider all required validation as optional. 174 | 175 | ``` php 176 | $validator = new \Volan\Volan($schema); 177 | $validator->setRequiredMode(false); 178 | $result = $validator->validate($book); 179 | ``` 180 | ### Logging 181 | If you want see validation process set logger 182 | ``` php 183 | 184 | 185 | $validator = new \Volan\Volan($schema); 186 | 187 | $result = $validator->validate($book); 188 | $result->getLog(); 189 | 190 | ``` 191 | 192 | ### PSR compatible class names 193 | 194 | You can use PSR compatible names for validation classes. 195 | Previous example with `mongoid` validation class can be rewritten like: 196 | ``` php 197 | namespace Volan\Validator; 198 | 199 | class MongoidValidator extends AbstractValidator 200 | { 201 | public function isValid($nodeData) 202 | { 203 | return ($nodeData instanceof \MongoId); 204 | } 205 | } 206 | ``` 207 | Here we changed `mongoid_validator` to `MongoidValidator`. 208 | Example with `int_between_10_and_20_validator` be rewritten to `IntBetween10And20Validator` 209 | 210 | ### Relational structure 211 | Let's imagine we have field in our book data 212 | ``` php 213 | ... 214 | 'categories' => [new \MongoId('111111111111111111111111'),new \MongoId('111111111111111111111112')] 215 | ... 216 | ``` 217 | and we want ensure that all elements not only instances of `MongoId` but actually present in our database. 218 | It is easy. Our validator will be look like: 219 | namespace Volan\Validator; 220 | ``` php 221 | class ArrayOfMongoids extends AbstractValidator 222 | { 223 | public function isValid($nodeData) 224 | { 225 | foreach($nodeData as $id) { 226 | if($id !instanceof \MongoId) || !$this->presentInCategoryCollection($id)) 227 | return false; 228 | } 229 | } 230 | 231 | return true; 232 | } 233 | 234 | public function presentInCategoryCollection($id) 235 | { 236 | // Getting connection and so on 237 | 238 | $collection = $db->selectCollection('categories'); 239 | return (bool)$collection->findOne(['_id' => $id]); 240 | } 241 | 242 | } 243 | ``` 244 | now in schema we add 245 | ``` php 246 | ... 247 | 'categories' => ['_type' => 'array_of_mongoids'] 248 | ... 249 | ``` 250 | 251 | ## Dependencies 252 | * PHP: >= 5.4 253 | 254 | ## Contribution 255 | Please see [CONTRIBUTING](CONTRIBUTING.md) for details. 256 | 257 | ## Licence 258 | The MIT License (MIT). Please see [License File](LICENSE.md) for more information. 259 | 260 | ## Tests 261 | 262 | phpunit 263 | 264 | 265 | Or with Docker 266 | 267 | docker run --rm -v "$PWD":/var/src/ serkin/php7 vendor/bin/phpunit --debug 268 | 269 | 270 | Code style 271 | 272 | docker run --rm -v "$PWD":/var/src/ serkin/php7 vendor/bin/php-cs-fixer fix src 273 | -------------------------------------------------------------------------------- /Vagrantfile: -------------------------------------------------------------------------------- 1 | Vagrant.configure(2) do |config| 2 | config.vm.box = "chef/centos-6.5" 3 | #config.vm.network "private_network", ip: "192.168.33.33" 4 | config.vm.hostname = "serkin" 5 | config.vm.synced_folder ".", "/vagrant" 6 | 7 | 8 | config.vm.provision "shell", inline: "yum install -y mc" 9 | 10 | config.vm.provision "shell", path: "vagrant/provision/php.sh" 11 | config.vm.provision "shell", path: "vagrant/provision/composer.sh" 12 | 13 | end 14 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "serkin/volan", 3 | "type": "library", 4 | "description": "PHP array schema validator", 5 | "keywords": ["php", "validation"], 6 | "homepage": "https://github.com/serkin/volan", 7 | "license": "MIT", 8 | "authors": [ 9 | { 10 | "name": "Serkin Alexander", 11 | "email": "serkin.alexander@gmail.com", 12 | "homepage": "http://linkedin.com/in/SerkinAlexander", 13 | "role": "Developer" 14 | } 15 | ], 16 | "require": { 17 | "php": ">=7.0|>=5.4", 18 | "monolog/monolog": "*" 19 | }, 20 | "require-dev": { 21 | "phpunit/phpunit": "~4.8|~5.7", 22 | "friendsofphp/php-cs-fixer": "*" 23 | }, 24 | 25 | "autoload": { 26 | "psr-4": { 27 | "Volan\\": "src/" 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/CustomArrayObject.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Volan; 8 | 9 | class CustomArrayObject extends \ArrayObject 10 | { 11 | /** 12 | * Gets key from current array. 13 | * Excludes _type from final array. 14 | * 15 | * @return array 16 | */ 17 | public function getArrayKeys() 18 | { 19 | $returnValue = []; 20 | 21 | foreach (array_keys($this->getArrayCopy()) as $key) { 22 | if ($key != '_type') { 23 | $returnValue[] = $key; 24 | } 25 | } 26 | 27 | return $returnValue; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/InMemoryLogger.php: -------------------------------------------------------------------------------- 1 | stream = $fp; 22 | } 23 | 24 | public function info($message, array $context = array()) 25 | { 26 | fwrite($this->stream, (string)$message . "\n"); 27 | } 28 | 29 | public function warning($message, array $context = array()) 30 | { 31 | $this->info('WARNING: ' . $message, $context); 32 | } 33 | 34 | public function debug($message, array $context = array()) 35 | { 36 | $this->info('DEBUG: ' . $message, $context); 37 | } 38 | 39 | public function critical($message, array $context = array()) 40 | { 41 | $this->info('CRITICAL: ' . $message, $context); 42 | } 43 | 44 | public function emergency($message, array $context = array()) 45 | { 46 | $this->info('EMERGENCY: ' . $message, $context); 47 | } 48 | 49 | public function error($message, array $context = array()) 50 | { 51 | $this->info('ERROR: ' . $message, $context); 52 | } 53 | 54 | public function alert($message, array $context = array()) 55 | { 56 | $this->info('ALERT: ' . $message, $context); 57 | } 58 | 59 | public function notice($message, array $context = array()) 60 | { 61 | $this->info('NOTICE: ' . $message, $context); 62 | } 63 | 64 | public function log($level, $message, array $context = array()) 65 | { 66 | $this->info($message, $context); 67 | } 68 | 69 | /** 70 | * 71 | * 72 | * @return string 73 | */ 74 | public function getLog() 75 | { 76 | rewind($this->stream); 77 | 78 | return stream_get_contents($this->stream); 79 | } 80 | } 81 | 82 | 83 | // Works 84 | 85 | /* 86 | 87 | $filename = "php://memory"; 88 | 89 | $fp = fopen($filename, "w+b"); 90 | fwrite($fp, 'hi'); 91 | 92 | fwrite($fp, 'dude'); 93 | rewind($fp); 94 | var_dump(stream_get_contents($fp)); 95 | fwrite($fp, 'dude'); 96 | rewind($fp); 97 | var_dump(stream_get_contents($fp)); 98 | */ 99 | -------------------------------------------------------------------------------- /src/Traits/ErrorHandlerTrait.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Volan\Traits; 8 | 9 | trait ErrorHandlerTrait 10 | { 11 | 12 | /** 13 | * @var array 14 | */ 15 | private $error; 16 | 17 | /** 18 | * @return array 19 | */ 20 | public function getErrorInfo() 21 | { 22 | return $this->error; 23 | } 24 | 25 | abstract public function getCurrentNode(); 26 | 27 | 28 | /** 29 | * @param string $message 30 | * @param int $code 31 | */ 32 | private function setError($message, $code) 33 | { 34 | $this->error = [ 35 | 'code' => $code, 36 | 'error' => $message, 37 | 'node' => $this->getCurrentNode() 38 | ]; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/Traits/LoggerTrait.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Volan\Traits; 8 | 9 | use Psr\Log\LoggerInterface; 10 | use Volan\InMemoryLogger; 11 | 12 | trait LoggerTrait 13 | { 14 | 15 | 16 | /** 17 | * @var \Psr\Log\LoggerInterface 18 | */ 19 | private $logger; 20 | 21 | 22 | public function setLogger(LoggerInterface $logger) 23 | { 24 | $this->logger = $logger; 25 | } 26 | 27 | 28 | 29 | /** 30 | * Gets current logger 31 | * 32 | * @return InMemoryLogger 33 | */ 34 | private function getLogger() 35 | { 36 | return $this->logger; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/Validator/AbstractValidator.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Volan\Validator; 8 | 9 | abstract class AbstractValidator 10 | { 11 | 12 | /** 13 | * @var string Last Error description 14 | */ 15 | protected $errorDescription = null; 16 | 17 | /** 18 | * @var array $params 19 | */ 20 | protected $params = []; 21 | 22 | /** 23 | * @return bool 24 | */ 25 | public function isRequired() 26 | { 27 | return false; 28 | } 29 | 30 | /** 31 | * @return bool 32 | */ 33 | public function isNested() 34 | { 35 | return false; 36 | } 37 | 38 | /** 39 | * Gets error description 40 | * 41 | * @return mixed 42 | */ 43 | public function getErrorDescription() 44 | { 45 | return $this->errorDescription; 46 | } 47 | 48 | 49 | /** 50 | * Sets error description 51 | * 52 | * @param string $error 53 | * 54 | */ 55 | public function setErrorDescription($error) 56 | { 57 | $this->errorDescription = $error; 58 | } 59 | 60 | /* 61 | * Sets custom params 62 | * 63 | * @param array $arr 64 | * 65 | * @return void 66 | */ 67 | public function setParams($arr = []) 68 | { 69 | foreach ($arr as $key => $value) { 70 | $this->params[$key] = $value; 71 | } 72 | } 73 | 74 | 75 | /** 76 | * 77 | * @param mixed $nodeData 78 | * 79 | * @return bool 80 | */ 81 | abstract public function isValid($nodeData); 82 | } 83 | -------------------------------------------------------------------------------- /src/Validator/ArrayValidator.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Volan\Validator; 8 | 9 | class ArrayValidator extends AbstractValidator 10 | { 11 | /** 12 | * @param mixed $nodeData 13 | * 14 | * @return bool 15 | */ 16 | public function isValid($nodeData) 17 | { 18 | return is_array($nodeData); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Validator/BooleanValidator.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Volan\Validator; 8 | 9 | class BooleanValidator extends AbstractValidator 10 | { 11 | /** 12 | * @param mixed $nodeData 13 | * 14 | * @return bool 15 | */ 16 | public function isValid($nodeData) 17 | { 18 | return is_bool($nodeData); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Validator/NestedArrayValidator.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Volan\Validator; 8 | 9 | class NestedArrayValidator extends ArrayValidator 10 | { 11 | /** 12 | * @return bool 13 | */ 14 | public function isNested() 15 | { 16 | return true; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Validator/NumberValidator.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Volan\Validator; 8 | 9 | class NumberValidator extends AbstractValidator 10 | { 11 | /** 12 | * @param mixed $nodeData 13 | * 14 | * @return bool 15 | */ 16 | public function isValid($nodeData) 17 | { 18 | return is_numeric($nodeData); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Validator/RequiredArrayValidator.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Volan\Validator; 8 | 9 | class RequiredArrayValidator extends ArrayValidator 10 | { 11 | /** 12 | * @return bool 13 | */ 14 | public function isRequired() 15 | { 16 | return true; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Validator/RequiredBooleanValidator.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Volan\Validator; 8 | 9 | class RequiredBooleanValidator extends BooleanValidator 10 | { 11 | /** 12 | * @return bool 13 | */ 14 | public function isRequired() 15 | { 16 | return true; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Validator/RequiredNestedArrayValidator.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Volan\Validator; 8 | 9 | class RequiredNestedArrayValidator extends NestedArrayValidator 10 | { 11 | /** 12 | * @return bool 13 | */ 14 | public function isRequired() 15 | { 16 | return true; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Validator/RequiredNumberValidator.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Volan\Validator; 8 | 9 | class RequiredNumberValidator extends NumberValidator 10 | { 11 | /** 12 | * @return bool 13 | */ 14 | public function isRequired() 15 | { 16 | return true; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Validator/RequiredStringValidator.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Volan\Validator; 8 | 9 | class RequiredStringValidator extends StringValidator 10 | { 11 | /** 12 | * @return bool 13 | */ 14 | public function isRequired() 15 | { 16 | return true; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Validator/StringValidator.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Volan\Validator; 8 | 9 | class StringValidator extends AbstractValidator 10 | { 11 | /** 12 | * Validate wether given data is string. 13 | * 14 | * @param mixed $nodeData 15 | * 16 | * @return bool 17 | */ 18 | public function isValid($nodeData) 19 | { 20 | return (is_string($nodeData) && $nodeData != ""); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/ValidatorResult.php: -------------------------------------------------------------------------------- 1 | $this->getErrorCode(), 47 | 'error' => $this->getErrorMessage(), 48 | 'node' => $this->getErrorMessage(), 49 | ]; 50 | } 51 | 52 | 53 | /** 54 | * Sets error. 55 | * 56 | * @param int $code 57 | * @param string $message 58 | */ 59 | public function setError($code, $node, $message = '') 60 | { 61 | $this->errorCode = $code; 62 | $this->errorNode = $node; 63 | $this->errorMessage = $message; 64 | } 65 | 66 | /** 67 | * @return string 68 | */ 69 | public function getErrorCode() 70 | { 71 | return $this->errorCode; 72 | } 73 | 74 | /** 75 | * @return string 76 | */ 77 | public function getErrorMessage() 78 | { 79 | return $this->errorMessage; 80 | } 81 | 82 | /** 83 | * @return string 84 | */ 85 | public function getErrorNode() 86 | { 87 | return $this->errorNode; 88 | } 89 | 90 | /** 91 | * @return string 92 | */ 93 | public function getLog() 94 | { 95 | return $this->log; 96 | } 97 | 98 | /** 99 | * @param $log 100 | * 101 | * @return $this 102 | */ 103 | public function setLog($log) 104 | { 105 | $this->log = $log; 106 | 107 | return $this; 108 | } 109 | 110 | 111 | 112 | /** 113 | * @return bool 114 | */ 115 | public function isValid() 116 | { 117 | return $this->errorCode === null; 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /src/Volan.php: -------------------------------------------------------------------------------- 1 | 5 | */ 6 | 7 | namespace Volan; 8 | 9 | use Volan\Validator\AbstractValidator; 10 | use Exception; 11 | use Volan\Traits\LoggerTrait; 12 | use Volan\Traits\ErrorHandlerTrait; 13 | 14 | class Volan 15 | { 16 | 17 | use ErrorHandlerTrait; 18 | use LoggerTrait; 19 | 20 | /** 21 | * If set to false all required fields set can be empty 22 | * 23 | * @var bool 24 | */ 25 | private $requiredMode = true; 26 | 27 | /** 28 | * If set to false allows excessive keys in array. Default is true 29 | * 30 | * @var bool 31 | */ 32 | private $strictMode; 33 | 34 | /** 35 | * @var array 36 | */ 37 | protected $params = []; 38 | 39 | /** 40 | * @var string 41 | */ 42 | private $currentNode = ''; 43 | /** 44 | * @var array 45 | */ 46 | private $schema = []; 47 | 48 | 49 | /** 50 | * @param array $schema 51 | * @param bool $strictMode 52 | */ 53 | public function __construct($schema, $strictMode = true) 54 | { 55 | $this->schema = $schema; 56 | $this->strictMode = $strictMode; 57 | 58 | $log = new InMemoryLogger(); 59 | $this->setLogger($log); 60 | } 61 | 62 | /** 63 | * Sets required mode 64 | * 65 | * @param bool $mode 66 | */ 67 | public function setRequiredMode($mode = true) 68 | { 69 | $this->requiredMode = $mode; 70 | } 71 | 72 | /** 73 | * Sets custom params 74 | * 75 | * @param array $arr 76 | * @return void 77 | * 78 | */ 79 | public function setParams($arr = []) 80 | { 81 | $this->params = $arr; 82 | } 83 | 84 | 85 | /** 86 | * @param array $arr 87 | * 88 | * @return ValidatorResult 89 | */ 90 | public function validate($arr) 91 | { 92 | $returnValue = new ValidatorResult(); 93 | $this->currentNode = 'root'; 94 | 95 | try { 96 | $this->validateSchemaBeginsWithRootKey(new CustomArrayObject($this->schema)); 97 | 98 | if ($this->strictMode) { 99 | $this->validateExcessiveKeysAbsent(new CustomArrayObject($this->schema['root']), $arr); 100 | } 101 | 102 | $this->validateNode('root', new CustomArrayObject($this->schema), $arr); 103 | } catch (Exception $exc) { 104 | $this->getLogger()->error($exc->getMessage()); 105 | 106 | $returnValue->setError($exc->getCode(), $this->getCurrentNode(), $exc->getMessage()); 107 | $returnValue->setLog($this->getLogger()->getLog()); 108 | } 109 | 110 | return $returnValue; 111 | } 112 | 113 | public function getCurrentNode() 114 | { 115 | return $this->currentNode; 116 | } 117 | 118 | /** 119 | * @param string $node 120 | * @param CustomArrayObject $schema 121 | * @param mixed $element 122 | * 123 | * @throws Exception 124 | */ 125 | private function validateNode($node, CustomArrayObject $schema, $element = []) 126 | { 127 | $nodeSchema = new CustomArrayObject($schema[$node]); 128 | 129 | foreach ($nodeSchema->getArrayKeys() as $key) { 130 | $this->currentNode = $node . '.' . $key; 131 | $this->getLogger()->info("We are in element: {$this->currentNode}"); 132 | 133 | $nodeData = isset($element[$key]) ? $element[$key] : null; 134 | 135 | 136 | $this->validateTypeFieldIsPresent($nodeSchema[$key]); 137 | 138 | $validator = $this->getClassValidator($nodeSchema[$key]); 139 | $validator->setParams($this->params); 140 | 141 | $isRequired = $this->requiredMode ? $validator->isRequired() : false; 142 | 143 | if ($isRequired === false && empty($nodeData)) { 144 | $this->getLogger()->info("Element: {$this->currentNode} has empty non-required data. We skip other check"); 145 | continue; 146 | } 147 | 148 | $this->validateRequiredFieldIsPresent($nodeData); 149 | 150 | $this->validateExcessiveKeys($validator, new CustomArrayObject($nodeSchema[$key]), $nodeData); 151 | 152 | $this->validateNodeValue($validator, $nodeData); 153 | 154 | $this->validateNesting($validator, $nodeData); 155 | 156 | if ($validator->isNested()) { 157 | $this->getLogger()->info("Element: {$this->currentNode} has children"); 158 | 159 | foreach ($nodeData as $record) { 160 | $this->validateNode($key, $nodeSchema, $record); 161 | } 162 | } else { 163 | $this->validateNode($key, $nodeSchema, $nodeData); 164 | } 165 | 166 | $this->getLogger()->info("Element: {$this->currentNode} finished checking successfully."); 167 | } 168 | } 169 | 170 | /** 171 | * @param CustomArrayObject $nodeSchema 172 | * @param array $nodeData 173 | * 174 | * @return bool 175 | */ 176 | private function isChildElementHasStrictKeys(CustomArrayObject $nodeSchema, $nodeData) 177 | { 178 | $returnValue = false; 179 | 180 | if (!empty($nodeData) && is_array($nodeData)) { 181 | $schemaKeys = $nodeSchema->getArrayKeys(); 182 | $dataKeys = count(array_filter(array_keys($nodeData), 'is_string')) ? array_keys($nodeData) : []; 183 | $returnValue = (bool)array_diff($dataKeys, $schemaKeys); 184 | } 185 | 186 | return $returnValue; 187 | } 188 | 189 | /** 190 | * @param AbstractValidator $validator 191 | * @param CustomArrayObject $schema 192 | * @param mixed $nodeData 193 | * 194 | */ 195 | private function validateExcessiveKeys(AbstractValidator $validator, CustomArrayObject $schema, $nodeData = null) 196 | { 197 | if ($this->strictMode === false) { 198 | return; 199 | } 200 | 201 | if (!$validator->isNested()) { 202 | $this->validateExcessiveKeysAbsent($schema, $nodeData); 203 | } else { 204 | foreach ($nodeData as $record) { 205 | $this->validateExcessiveKeysAbsent($schema, $record); 206 | } 207 | } 208 | } 209 | 210 | /** 211 | * @param CustomArrayObject $schema 212 | * @param mixed $nodeData 213 | * 214 | * @throws Exception 215 | */ 216 | private function validateExcessiveKeysAbsent($schema, $nodeData) 217 | { 218 | if ($this->isChildElementHasStrictKeys($schema, $nodeData)) { 219 | throw new Exception("{$this->currentNode} element has excessive keys", ValidatorResult::ERROR_NODE_HAS_EXCESSIVE_KEYS); 220 | } 221 | } 222 | 223 | /** 224 | * @param array $node 225 | * 226 | * @throws Exception 227 | */ 228 | private function validateTypeFieldIsPresent($node) 229 | { 230 | if (empty($node['_type'])) { 231 | throw new Exception("Element: {$this->currentNode} has no compulsory field: _type", ValidatorResult::ERROR_NODE_HAS_NO_FIELD_TYPE); 232 | } 233 | 234 | $this->getLogger()->info("Element: {$this->currentNode} has field: _type"); 235 | } 236 | 237 | /** 238 | 239 | * @param mixed $nodeData 240 | * 241 | * @throws Exception 242 | */ 243 | private function validateRequiredFieldIsPresent($nodeData = null) 244 | { 245 | if (is_null($nodeData)) { 246 | throw new Exception("{$this->currentNode} element has flag *required*", ValidatorResult::ERROR_REQUIRED_FIELD_IS_EMPTY); 247 | } 248 | 249 | $this->getLogger()->info('*required* check passed'); 250 | } 251 | 252 | /** 253 | * @param array $node 254 | * 255 | * @return AbstractValidator 256 | * 257 | * @throws Exception 258 | */ 259 | private function getClassValidator($node) 260 | { 261 | $classStringName = $node['_type'].'_validator'; 262 | $classStringNamespace = '\Volan\Validator\\'; 263 | 264 | $classNames = []; 265 | $classNames[] = $classStringNamespace.$classStringName; 266 | $classNames[] = $classStringNamespace.$this->getPSRCompatibleClassName($classStringName); 267 | 268 | if (class_exists($classNames[0])) { 269 | $validatorClass = new $classNames[0](); 270 | } elseif (class_exists($classNames[1])) { 271 | $validatorClass = new $classNames[1](); 272 | } else { 273 | throw new Exception("Class validator {$classNames[0]}/{$classNames[1]} not found", ValidatorResult::ERROR_VALIDATOR_CLASS_NOT_FOUND); 274 | } 275 | 276 | $this->getLogger()->info("Class validator ".get_class($validatorClass)." exists"); 277 | 278 | return $validatorClass; 279 | } 280 | 281 | /** 282 | * Validate that schema begins with root element 283 | * 284 | * @param CustomArrayObject $schema 285 | * 286 | * @throws Exception 287 | * 288 | * @return void 289 | */ 290 | private function validateSchemaBeginsWithRootKey(CustomArrayObject $schema) 291 | { 292 | if (empty($schema['root'])) { 293 | throw new Exception('No root element in schema', ValidatorResult::ERROR_SCHEMA_HAS_NO_ROOT_ELEMENT); 294 | } 295 | } 296 | /* 297 | * Converts string constisting _ to PSR compatible class name 298 | * 299 | * @param string 300 | * 301 | * @return string 302 | */ 303 | private function getPSRCompatibleClassName($string) 304 | { 305 | $className = ''; 306 | $arr = explode('_', $string); 307 | 308 | foreach ($arr as $key => $value) { 309 | $className .= ucfirst(strtolower($value)); 310 | } 311 | 312 | return $className; 313 | } 314 | 315 | /** 316 | * @param AbstractValidator $validator 317 | * @param mixed $nodeData 318 | * 319 | * @throws Exception 320 | */ 321 | private function validateNodeValue(AbstractValidator $validator, $nodeData = null) 322 | { 323 | if ($validator->isValid($nodeData) === false) { 324 | $error = $this->currentNode . " element has invalid associated data."; 325 | $error .= !is_null($validator->getErrorDescription()) 326 | ? $validator->getErrorDescription() 327 | : ''; 328 | 329 | throw new Exception($error, ValidatorResult::ERROR_NODE_IS_NOT_VALID); 330 | } 331 | } 332 | 333 | /** 334 | * @param AbstractValidator $validator 335 | * @param mixed $nodeData 336 | * 337 | * @throws Exception 338 | */ 339 | private function validateNesting(AbstractValidator $validator, $nodeData) 340 | { 341 | if ($validator->isNested() && (!isset($nodeData[0]) || !is_array($nodeData[0]))) { 342 | throw new Exception("{$this->currentNode} element supposed to be nested but it is not", ValidatorResult::ERROR_NESTED_ELEMENT_NOT_VALID); 343 | } 344 | } 345 | } 346 | -------------------------------------------------------------------------------- /vagrant/provision/composer.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | php -r "readfile('https://getcomposer.org/installer');" | php 3 | mv composer.phar /usr/local/bin/composer 4 | # cd /vagrant 5 | # /usr/local/bin/composer install 6 | -------------------------------------------------------------------------------- /vagrant/provision/files/php.ini: -------------------------------------------------------------------------------- 1 | [PHP] 2 | 3 | ;;;;;;;;;;;;;;;;;;; 4 | ; About php.ini ; 5 | ;;;;;;;;;;;;;;;;;;; 6 | ; PHP's initialization file, generally called php.ini, is responsible for 7 | ; configuring many of the aspects of PHP's behavior. 8 | 9 | ; PHP attempts to find and load this configuration from a number of locations. 10 | ; The following is a summary of its search order: 11 | ; 1. SAPI module specific location. 12 | ; 2. The PHPRC environment variable. (As of PHP 5.2.0) 13 | ; 3. A number of predefined registry keys on Windows (As of PHP 5.2.0) 14 | ; 4. Current working directory (except CLI) 15 | ; 5. The web server's directory (for SAPI modules), or directory of PHP 16 | ; (otherwise in Windows) 17 | ; 6. The directory from the --with-config-file-path compile time option, or the 18 | ; Windows directory (C:\windows or C:\winnt) 19 | ; See the PHP docs for more specific information. 20 | ; http://php.net/configuration.file 21 | 22 | ; The syntax of the file is extremely simple. Whitespace and lines 23 | ; beginning with a semicolon are silently ignored (as you probably guessed). 24 | ; Section headers (e.g. [Foo]) are also silently ignored, even though 25 | ; they might mean something in the future. 26 | 27 | ; Directives following the section heading [PATH=/www/mysite] only 28 | ; apply to PHP files in the /www/mysite directory. Directives 29 | ; following the section heading [HOST=www.example.com] only apply to 30 | ; PHP files served from www.example.com. Directives set in these 31 | ; special sections cannot be overridden by user-defined INI files or 32 | ; at runtime. Currently, [PATH=] and [HOST=] sections only work under 33 | ; CGI/FastCGI. 34 | ; http://php.net/ini.sections 35 | 36 | ; Directives are specified using the following syntax: 37 | ; directive = value 38 | ; Directive names are *case sensitive* - foo=bar is different from FOO=bar. 39 | ; Directives are variables used to configure PHP or PHP extensions. 40 | ; There is no name validation. If PHP can't find an expected 41 | ; directive because it is not set or is mistyped, a default value will be used. 42 | 43 | ; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one 44 | ; of the INI constants (On, Off, True, False, Yes, No and None) or an expression 45 | ; (e.g. E_ALL & ~E_NOTICE), a quoted string ("bar"), or a reference to a 46 | ; previously set variable or directive (e.g. ${foo}) 47 | 48 | ; Expressions in the INI file are limited to bitwise operators and parentheses: 49 | ; | bitwise OR 50 | ; ^ bitwise XOR 51 | ; & bitwise AND 52 | ; ~ bitwise NOT 53 | ; ! boolean NOT 54 | 55 | ; Boolean flags can be turned on using the values 1, On, True or Yes. 56 | ; They can be turned off using the values 0, Off, False or No. 57 | 58 | ; An empty string can be denoted by simply not writing anything after the equal 59 | ; sign, or by using the None keyword: 60 | 61 | ; foo = ; sets foo to an empty string 62 | ; foo = None ; sets foo to an empty string 63 | ; foo = "None" ; sets foo to the string 'None' 64 | 65 | ; If you use constants in your value, and these constants belong to a 66 | ; dynamically loaded extension (either a PHP extension or a Zend extension), 67 | ; you may only use these constants *after* the line that loads the extension. 68 | 69 | ;;;;;;;;;;;;;;;;;;; 70 | ; About this file ; 71 | ;;;;;;;;;;;;;;;;;;; 72 | ; PHP comes packaged with two INI files. One that is recommended to be used 73 | ; in production environments and one that is recommended to be used in 74 | ; development environments. 75 | 76 | ; php.ini-production contains settings which hold security, performance and 77 | ; best practices at its core. But please be aware, these settings may break 78 | ; compatibility with older or less security conscience applications. We 79 | ; recommending using the production ini in production and testing environments. 80 | 81 | ; php.ini-development is very similar to its production variant, except it is 82 | ; much more verbose when it comes to errors. We recommend using the 83 | ; development version only in development environments, as errors shown to 84 | ; application users can inadvertently leak otherwise secure information. 85 | 86 | ; This is php.ini-production INI file. 87 | 88 | ;;;;;;;;;;;;;;;;;;; 89 | ; Quick Reference ; 90 | ;;;;;;;;;;;;;;;;;;; 91 | ; The following are all the settings which are different in either the production 92 | ; or development versions of the INIs with respect to PHP's default behavior. 93 | ; Please see the actual settings later in the document for more details as to why 94 | ; we recommend these changes in PHP's behavior. 95 | 96 | ; display_errors 97 | ; Default Value: On 98 | ; Development Value: On 99 | ; Production Value: Off 100 | 101 | ; display_startup_errors 102 | ; Default Value: Off 103 | ; Development Value: On 104 | ; Production Value: Off 105 | 106 | ; error_reporting 107 | ; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED 108 | ; Development Value: E_ALL 109 | ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT 110 | 111 | ; html_errors 112 | ; Default Value: On 113 | ; Development Value: On 114 | ; Production value: On 115 | 116 | ; log_errors 117 | ; Default Value: Off 118 | ; Development Value: On 119 | ; Production Value: On 120 | 121 | ; max_input_time 122 | ; Default Value: -1 (Unlimited) 123 | ; Development Value: 60 (60 seconds) 124 | ; Production Value: 60 (60 seconds) 125 | 126 | ; output_buffering 127 | ; Default Value: Off 128 | ; Development Value: 4096 129 | ; Production Value: 4096 130 | 131 | ; register_argc_argv 132 | ; Default Value: On 133 | ; Development Value: Off 134 | ; Production Value: Off 135 | 136 | ; request_order 137 | ; Default Value: None 138 | ; Development Value: "GP" 139 | ; Production Value: "GP" 140 | 141 | ; session.gc_divisor 142 | ; Default Value: 100 143 | ; Development Value: 1000 144 | ; Production Value: 1000 145 | 146 | ; session.hash_bits_per_character 147 | ; Default Value: 4 148 | ; Development Value: 5 149 | ; Production Value: 5 150 | 151 | ; short_open_tag 152 | ; Default Value: On 153 | ; Development Value: Off 154 | ; Production Value: Off 155 | 156 | ; track_errors 157 | ; Default Value: Off 158 | ; Development Value: On 159 | ; Production Value: Off 160 | 161 | ; url_rewriter.tags 162 | ; Default Value: "a=href,area=href,frame=src,form=,fieldset=" 163 | ; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry" 164 | ; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry" 165 | 166 | ; variables_order 167 | ; Default Value: "EGPCS" 168 | ; Development Value: "GPCS" 169 | ; Production Value: "GPCS" 170 | 171 | ;;;;;;;;;;;;;;;;;;;; 172 | ; php.ini Options ; 173 | ;;;;;;;;;;;;;;;;;;;; 174 | ; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini" 175 | ;user_ini.filename = ".user.ini" 176 | 177 | ; To disable this feature set this option to empty value 178 | ;user_ini.filename = 179 | 180 | ; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 seconds (5 minutes) 181 | ;user_ini.cache_ttl = 300 182 | 183 | ;;;;;;;;;;;;;;;;;;;; 184 | ; Language Options ; 185 | ;;;;;;;;;;;;;;;;;;;; 186 | 187 | ; Enable the PHP scripting language engine under Apache. 188 | ; http://php.net/engine 189 | engine = On 190 | 191 | ; This directive determines whether or not PHP will recognize code between 192 | ; tags as PHP source which should be processed as such. It is 193 | ; generally recommended that should be used and that this feature 194 | ; should be disabled, as enabling it may result in issues when generating XML 195 | ; documents, however this remains supported for backward compatibility reasons. 196 | ; Note that this directive does not control the tags. 205 | ; http://php.net/asp-tags 206 | asp_tags = Off 207 | 208 | ; The number of significant digits displayed in floating point numbers. 209 | ; http://php.net/precision 210 | precision = 14 211 | 212 | ; Output buffering is a mechanism for controlling how much output data 213 | ; (excluding headers and cookies) PHP should keep internally before pushing that 214 | ; data to the client. If your application's output exceeds this setting, PHP 215 | ; will send that data in chunks of roughly the size you specify. 216 | ; Turning on this setting and managing its maximum buffer size can yield some 217 | ; interesting side-effects depending on your application and web server. 218 | ; You may be able to send headers and cookies after you've already sent output 219 | ; through print or echo. You also may see performance benefits if your server is 220 | ; emitting less packets due to buffered output versus PHP streaming the output 221 | ; as it gets it. On production servers, 4096 bytes is a good setting for performance 222 | ; reasons. 223 | ; Note: Output buffering can also be controlled via Output Buffering Control 224 | ; functions. 225 | ; Possible Values: 226 | ; On = Enabled and buffer is unlimited. (Use with caution) 227 | ; Off = Disabled 228 | ; Integer = Enables the buffer and sets its maximum size in bytes. 229 | ; Note: This directive is hardcoded to Off for the CLI SAPI 230 | ; Default Value: Off 231 | ; Development Value: 4096 232 | ; Production Value: 4096 233 | ; http://php.net/output-buffering 234 | output_buffering = 4096 235 | 236 | ; You can redirect all of the output of your scripts to a function. For 237 | ; example, if you set output_handler to "mb_output_handler", character 238 | ; encoding will be transparently converted to the specified encoding. 239 | ; Setting any output handler automatically turns on output buffering. 240 | ; Note: People who wrote portable scripts should not depend on this ini 241 | ; directive. Instead, explicitly set the output handler using ob_start(). 242 | ; Using this ini directive may cause problems unless you know what script 243 | ; is doing. 244 | ; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler" 245 | ; and you cannot use both "ob_gzhandler" and "zlib.output_compression". 246 | ; Note: output_handler must be empty if this is set 'On' !!!! 247 | ; Instead you must use zlib.output_handler. 248 | ; http://php.net/output-handler 249 | ;output_handler = 250 | 251 | ; Transparent output compression using the zlib library 252 | ; Valid values for this option are 'off', 'on', or a specific buffer size 253 | ; to be used for compression (default is 4KB) 254 | ; Note: Resulting chunk size may vary due to nature of compression. PHP 255 | ; outputs chunks that are few hundreds bytes each as a result of 256 | ; compression. If you prefer a larger chunk size for better 257 | ; performance, enable output_buffering in addition. 258 | ; Note: You need to use zlib.output_handler instead of the standard 259 | ; output_handler, or otherwise the output will be corrupted. 260 | ; http://php.net/zlib.output-compression 261 | zlib.output_compression = Off 262 | 263 | ; http://php.net/zlib.output-compression-level 264 | ;zlib.output_compression_level = -1 265 | 266 | ; You cannot specify additional output handlers if zlib.output_compression 267 | ; is activated here. This setting does the same as output_handler but in 268 | ; a different order. 269 | ; http://php.net/zlib.output-handler 270 | ;zlib.output_handler = 271 | 272 | ; Implicit flush tells PHP to tell the output layer to flush itself 273 | ; automatically after every output block. This is equivalent to calling the 274 | ; PHP function flush() after each and every call to print() or echo() and each 275 | ; and every HTML block. Turning this option on has serious performance 276 | ; implications and is generally recommended for debugging purposes only. 277 | ; http://php.net/implicit-flush 278 | ; Note: This directive is hardcoded to On for the CLI SAPI 279 | implicit_flush = Off 280 | 281 | ; The unserialize callback function will be called (with the undefined class' 282 | ; name as parameter), if the unserializer finds an undefined class 283 | ; which should be instantiated. A warning appears if the specified function is 284 | ; not defined, or if the function doesn't include/implement the missing class. 285 | ; So only set this entry, if you really want to implement such a 286 | ; callback-function. 287 | unserialize_callback_func = 288 | 289 | ; When floats & doubles are serialized store serialize_precision significant 290 | ; digits after the floating point. The default value ensures that when floats 291 | ; are decoded with unserialize, the data will remain the same. 292 | serialize_precision = 17 293 | 294 | ; open_basedir, if set, limits all file operations to the defined directory 295 | ; and below. This directive makes most sense if used in a per-directory 296 | ; or per-virtualhost web server configuration file. This directive is 297 | ; *NOT* affected by whether Safe Mode is turned On or Off. 298 | ; http://php.net/open-basedir 299 | ;open_basedir = 300 | 301 | ; This directive allows you to disable certain functions for security reasons. 302 | ; It receives a comma-delimited list of function names. This directive is 303 | ; *NOT* affected by whether Safe Mode is turned On or Off. 304 | ; http://php.net/disable-functions 305 | disable_functions = 306 | 307 | ; This directive allows you to disable certain classes for security reasons. 308 | ; It receives a comma-delimited list of class names. This directive is 309 | ; *NOT* affected by whether Safe Mode is turned On or Off. 310 | ; http://php.net/disable-classes 311 | disable_classes = 312 | 313 | ; Colors for Syntax Highlighting mode. Anything that's acceptable in 314 | ; would work. 315 | ; http://php.net/syntax-highlighting 316 | ;highlight.string = #DD0000 317 | ;highlight.comment = #FF9900 318 | ;highlight.keyword = #007700 319 | ;highlight.default = #0000BB 320 | ;highlight.html = #000000 321 | 322 | ; If enabled, the request will be allowed to complete even if the user aborts 323 | ; the request. Consider enabling it if executing long requests, which may end up 324 | ; being interrupted by the user or a browser timing out. PHP's default behavior 325 | ; is to disable this feature. 326 | ; http://php.net/ignore-user-abort 327 | ;ignore_user_abort = On 328 | 329 | ; Determines the size of the realpath cache to be used by PHP. This value should 330 | ; be increased on systems where PHP opens many files to reflect the quantity of 331 | ; the file operations performed. 332 | ; http://php.net/realpath-cache-size 333 | ;realpath_cache_size = 16k 334 | 335 | ; Duration of time, in seconds for which to cache realpath information for a given 336 | ; file or directory. For systems with rarely changing files, consider increasing this 337 | ; value. 338 | ; http://php.net/realpath-cache-ttl 339 | ;realpath_cache_ttl = 120 340 | 341 | ; Enables or disables the circular reference collector. 342 | ; http://php.net/zend.enable-gc 343 | zend.enable_gc = On 344 | 345 | ; If enabled, scripts may be written in encodings that are incompatible with 346 | ; the scanner. CP936, Big5, CP949 and Shift_JIS are the examples of such 347 | ; encodings. To use this feature, mbstring extension must be enabled. 348 | ; Default: Off 349 | ;zend.multibyte = Off 350 | 351 | ; Allows to set the default encoding for the scripts. This value will be used 352 | ; unless "declare(encoding=...)" directive appears at the top of the script. 353 | ; Only affects if zend.multibyte is set. 354 | ; Default: "" 355 | ;zend.script_encoding = 356 | 357 | ;;;;;;;;;;;;;;;;; 358 | ; Miscellaneous ; 359 | ;;;;;;;;;;;;;;;;; 360 | 361 | ; Decides whether PHP may expose the fact that it is installed on the server 362 | ; (e.g. by adding its signature to the Web server header). It is no security 363 | ; threat in any way, but it makes it possible to determine whether you use PHP 364 | ; on your server or not. 365 | ; http://php.net/expose-php 366 | expose_php = On 367 | 368 | ;;;;;;;;;;;;;;;;;;; 369 | ; Resource Limits ; 370 | ;;;;;;;;;;;;;;;;;;; 371 | 372 | ; Maximum execution time of each script, in seconds 373 | ; http://php.net/max-execution-time 374 | ; Note: This directive is hardcoded to 0 for the CLI SAPI 375 | max_execution_time = 30 376 | 377 | ; Maximum amount of time each script may spend parsing request data. It's a good 378 | ; idea to limit this time on productions servers in order to eliminate unexpectedly 379 | ; long running scripts. 380 | ; Note: This directive is hardcoded to -1 for the CLI SAPI 381 | ; Default Value: -1 (Unlimited) 382 | ; Development Value: 60 (60 seconds) 383 | ; Production Value: 60 (60 seconds) 384 | ; http://php.net/max-input-time 385 | max_input_time = 60 386 | 387 | ; Maximum input variable nesting level 388 | ; http://php.net/max-input-nesting-level 389 | ;max_input_nesting_level = 64 390 | 391 | ; How many GET/POST/COOKIE input variables may be accepted 392 | ; max_input_vars = 1000 393 | 394 | ; Maximum amount of memory a script may consume (128MB) 395 | ; http://php.net/memory-limit 396 | memory_limit = 128M 397 | 398 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 399 | ; Error handling and logging ; 400 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 401 | 402 | ; This directive informs PHP of which errors, warnings and notices you would like 403 | ; it to take action for. The recommended way of setting values for this 404 | ; directive is through the use of the error level constants and bitwise 405 | ; operators. The error level constants are below here for convenience as well as 406 | ; some common settings and their meanings. 407 | ; By default, PHP is set to take action on all errors, notices and warnings EXCEPT 408 | ; those related to E_NOTICE and E_STRICT, which together cover best practices and 409 | ; recommended coding standards in PHP. For performance reasons, this is the 410 | ; recommend error reporting setting. Your production server shouldn't be wasting 411 | ; resources complaining about best practices and coding standards. That's what 412 | ; development servers and development settings are for. 413 | ; Note: The php.ini-development file has this setting as E_ALL. This 414 | ; means it pretty much reports everything which is exactly what you want during 415 | ; development and early testing. 416 | ; 417 | ; Error Level Constants: 418 | ; E_ALL - All errors and warnings (includes E_STRICT as of PHP 5.4.0) 419 | ; E_ERROR - fatal run-time errors 420 | ; E_RECOVERABLE_ERROR - almost fatal run-time errors 421 | ; E_WARNING - run-time warnings (non-fatal errors) 422 | ; E_PARSE - compile-time parse errors 423 | ; E_NOTICE - run-time notices (these are warnings which often result 424 | ; from a bug in your code, but it's possible that it was 425 | ; intentional (e.g., using an uninitialized variable and 426 | ; relying on the fact it is automatically initialized to an 427 | ; empty string) 428 | ; E_STRICT - run-time notices, enable to have PHP suggest changes 429 | ; to your code which will ensure the best interoperability 430 | ; and forward compatibility of your code 431 | ; E_CORE_ERROR - fatal errors that occur during PHP's initial startup 432 | ; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's 433 | ; initial startup 434 | ; E_COMPILE_ERROR - fatal compile-time errors 435 | ; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) 436 | ; E_USER_ERROR - user-generated error message 437 | ; E_USER_WARNING - user-generated warning message 438 | ; E_USER_NOTICE - user-generated notice message 439 | ; E_DEPRECATED - warn about code that will not work in future versions 440 | ; of PHP 441 | ; E_USER_DEPRECATED - user-generated deprecation warnings 442 | ; 443 | ; Common Values: 444 | ; E_ALL (Show all errors, warnings and notices including coding standards.) 445 | ; E_ALL & ~E_NOTICE (Show all errors, except for notices) 446 | ; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.) 447 | ; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) 448 | ; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED 449 | ; Development Value: E_ALL 450 | ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT 451 | ; http://php.net/error-reporting 452 | error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT 453 | 454 | ; This directive controls whether or not and where PHP will output errors, 455 | ; notices and warnings too. Error output is very useful during development, but 456 | ; it could be very dangerous in production environments. Depending on the code 457 | ; which is triggering the error, sensitive information could potentially leak 458 | ; out of your application such as database usernames and passwords or worse. 459 | ; For production environments, we recommend logging errors rather than 460 | ; sending them to STDOUT. 461 | ; Possible Values: 462 | ; Off = Do not display any errors 463 | ; stderr = Display errors to STDERR (affects only CGI/CLI binaries!) 464 | ; On or stdout = Display errors to STDOUT 465 | ; Default Value: On 466 | ; Development Value: On 467 | ; Production Value: Off 468 | ; http://php.net/display-errors 469 | display_errors = Off 470 | 471 | ; The display of errors which occur during PHP's startup sequence are handled 472 | ; separately from display_errors. PHP's default behavior is to suppress those 473 | ; errors from clients. Turning the display of startup errors on can be useful in 474 | ; debugging configuration problems. We strongly recommend you 475 | ; set this to 'off' for production servers. 476 | ; Default Value: Off 477 | ; Development Value: On 478 | ; Production Value: Off 479 | ; http://php.net/display-startup-errors 480 | display_startup_errors = Off 481 | 482 | ; Besides displaying errors, PHP can also log errors to locations such as a 483 | ; server-specific log, STDERR, or a location specified by the error_log 484 | ; directive found below. While errors should not be displayed on productions 485 | ; servers they should still be monitored and logging is a great way to do that. 486 | ; Default Value: Off 487 | ; Development Value: On 488 | ; Production Value: On 489 | ; http://php.net/log-errors 490 | log_errors = On 491 | 492 | ; Set maximum length of log_errors. In error_log information about the source is 493 | ; added. The default is 1024 and 0 allows to not apply any maximum length at all. 494 | ; http://php.net/log-errors-max-len 495 | log_errors_max_len = 1024 496 | 497 | ; Do not log repeated messages. Repeated errors must occur in same file on same 498 | ; line unless ignore_repeated_source is set true. 499 | ; http://php.net/ignore-repeated-errors 500 | ignore_repeated_errors = Off 501 | 502 | ; Ignore source of message when ignoring repeated messages. When this setting 503 | ; is On you will not log errors with repeated messages from different files or 504 | ; source lines. 505 | ; http://php.net/ignore-repeated-source 506 | ignore_repeated_source = Off 507 | 508 | ; If this parameter is set to Off, then memory leaks will not be shown (on 509 | ; stdout or in the log). This has only effect in a debug compile, and if 510 | ; error reporting includes E_WARNING in the allowed list 511 | ; http://php.net/report-memleaks 512 | report_memleaks = On 513 | 514 | ; This setting is on by default. 515 | ;report_zend_debug = 0 516 | 517 | ; Store the last error/warning message in $php_errormsg (boolean). Setting this value 518 | ; to On can assist in debugging and is appropriate for development servers. It should 519 | ; however be disabled on production servers. 520 | ; Default Value: Off 521 | ; Development Value: On 522 | ; Production Value: Off 523 | ; http://php.net/track-errors 524 | track_errors = Off 525 | 526 | ; Turn off normal error reporting and emit XML-RPC error XML 527 | ; http://php.net/xmlrpc-errors 528 | ;xmlrpc_errors = 0 529 | 530 | ; An XML-RPC faultCode 531 | ;xmlrpc_error_number = 0 532 | 533 | ; When PHP displays or logs an error, it has the capability of formatting the 534 | ; error message as HTML for easier reading. This directive controls whether 535 | ; the error message is formatted as HTML or not. 536 | ; Note: This directive is hardcoded to Off for the CLI SAPI 537 | ; Default Value: On 538 | ; Development Value: On 539 | ; Production value: On 540 | ; http://php.net/html-errors 541 | html_errors = On 542 | 543 | ; If html_errors is set to On *and* docref_root is not empty, then PHP 544 | ; produces clickable error messages that direct to a page describing the error 545 | ; or function causing the error in detail. 546 | ; You can download a copy of the PHP manual from http://php.net/docs 547 | ; and change docref_root to the base URL of your local copy including the 548 | ; leading '/'. You must also specify the file extension being used including 549 | ; the dot. PHP's default behavior is to leave these settings empty, in which 550 | ; case no links to documentation are generated. 551 | ; Note: Never use this feature for production boxes. 552 | ; http://php.net/docref-root 553 | ; Examples 554 | ;docref_root = "/phpmanual/" 555 | 556 | ; http://php.net/docref-ext 557 | ;docref_ext = .html 558 | 559 | ; String to output before an error message. PHP's default behavior is to leave 560 | ; this setting blank. 561 | ; http://php.net/error-prepend-string 562 | ; Example: 563 | ;error_prepend_string = "" 564 | 565 | ; String to output after an error message. PHP's default behavior is to leave 566 | ; this setting blank. 567 | ; http://php.net/error-append-string 568 | ; Example: 569 | ;error_append_string = "" 570 | 571 | ; Log errors to specified file. PHP's default behavior is to leave this value 572 | ; empty. 573 | ; http://php.net/error-log 574 | ; Example: 575 | ;error_log = php_errors.log 576 | ; Log errors to syslog (Event Log on NT, not valid in Windows 95). 577 | ;error_log = syslog 578 | 579 | ;windows.show_crt_warning 580 | ; Default value: 0 581 | ; Development value: 0 582 | ; Production value: 0 583 | 584 | ;;;;;;;;;;;;;;;;; 585 | ; Data Handling ; 586 | ;;;;;;;;;;;;;;;;; 587 | 588 | ; The separator used in PHP generated URLs to separate arguments. 589 | ; PHP's default setting is "&". 590 | ; http://php.net/arg-separator.output 591 | ; Example: 592 | ;arg_separator.output = "&" 593 | 594 | ; List of separator(s) used by PHP to parse input URLs into variables. 595 | ; PHP's default setting is "&". 596 | ; NOTE: Every character in this directive is considered as separator! 597 | ; http://php.net/arg-separator.input 598 | ; Example: 599 | ;arg_separator.input = ";&" 600 | 601 | ; This directive determines which super global arrays are registered when PHP 602 | ; starts up. G,P,C,E & S are abbreviations for the following respective super 603 | ; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty 604 | ; paid for the registration of these arrays and because ENV is not as commonly 605 | ; used as the others, ENV is not recommended on productions servers. You 606 | ; can still get access to the environment variables through getenv() should you 607 | ; need to. 608 | ; Default Value: "EGPCS" 609 | ; Development Value: "GPCS" 610 | ; Production Value: "GPCS"; 611 | ; http://php.net/variables-order 612 | variables_order = "GPCS" 613 | 614 | ; This directive determines which super global data (G,P,C,E & S) should 615 | ; be registered into the super global array REQUEST. If so, it also determines 616 | ; the order in which that data is registered. The values for this directive are 617 | ; specified in the same manner as the variables_order directive, EXCEPT one. 618 | ; Leaving this value empty will cause PHP to use the value set in the 619 | ; variables_order directive. It does not mean it will leave the super globals 620 | ; array REQUEST empty. 621 | ; Default Value: None 622 | ; Development Value: "GP" 623 | ; Production Value: "GP" 624 | ; http://php.net/request-order 625 | request_order = "GP" 626 | 627 | ; This directive determines whether PHP registers $argv & $argc each time it 628 | ; runs. $argv contains an array of all the arguments passed to PHP when a script 629 | ; is invoked. $argc contains an integer representing the number of arguments 630 | ; that were passed when the script was invoked. These arrays are extremely 631 | ; useful when running scripts from the command line. When this directive is 632 | ; enabled, registering these variables consumes CPU cycles and memory each time 633 | ; a script is executed. For performance reasons, this feature should be disabled 634 | ; on production servers. 635 | ; Note: This directive is hardcoded to On for the CLI SAPI 636 | ; Default Value: On 637 | ; Development Value: Off 638 | ; Production Value: Off 639 | ; http://php.net/register-argc-argv 640 | register_argc_argv = Off 641 | 642 | ; When enabled, the ENV, REQUEST and SERVER variables are created when they're 643 | ; first used (Just In Time) instead of when the script starts. If these 644 | ; variables are not used within a script, having this directive on will result 645 | ; in a performance gain. The PHP directive register_argc_argv must be disabled 646 | ; for this directive to have any affect. 647 | ; http://php.net/auto-globals-jit 648 | auto_globals_jit = On 649 | 650 | ; Whether PHP will read the POST data. 651 | ; This option is enabled by default. 652 | ; Most likely, you won't want to disable this option globally. It causes $_POST 653 | ; and $_FILES to always be empty; the only way you will be able to read the 654 | ; POST data will be through the php://input stream wrapper. This can be useful 655 | ; to proxy requests or to process the POST data in a memory efficient fashion. 656 | ; http://php.net/enable-post-data-reading 657 | ;enable_post_data_reading = Off 658 | 659 | ; Maximum size of POST data that PHP will accept. 660 | ; Its value may be 0 to disable the limit. It is ignored if POST data reading 661 | ; is disabled through enable_post_data_reading. 662 | ; http://php.net/post-max-size 663 | post_max_size = 8M 664 | 665 | ; Automatically add files before PHP document. 666 | ; http://php.net/auto-prepend-file 667 | auto_prepend_file = 668 | 669 | ; Automatically add files after PHP document. 670 | ; http://php.net/auto-append-file 671 | auto_append_file = 672 | 673 | ; By default, PHP will output a character encoding using 674 | ; the Content-type: header. To disable sending of the charset, simply 675 | ; set it to be empty. 676 | ; 677 | ; PHP's built-in default is text/html 678 | ; http://php.net/default-mimetype 679 | default_mimetype = "text/html" 680 | 681 | ; PHP's default character set is set to empty. 682 | ; http://php.net/default-charset 683 | default_charset = "UTF-8" 684 | 685 | ; PHP internal character encoding is set to empty. 686 | ; If empty, default_charset is used. 687 | ; http://php.net/internal-encoding 688 | ;internal_encoding = 689 | 690 | ; PHP input character encoding is set to empty. 691 | ; http://php.net/input-encoding 692 | ;input_encoding = 693 | 694 | ; PHP output character encoding is set to empty. 695 | ; mbstring or iconv output handler is used. 696 | ; See also output_buffer. 697 | ; http://php.net/output-encoding 698 | ;output_encoding = 699 | 700 | ; Always populate the $HTTP_RAW_POST_DATA variable. PHP's default behavior is 701 | ; to disable this feature and it will be removed in a future version. 702 | ; If post reading is disabled through enable_post_data_reading, 703 | ; $HTTP_RAW_POST_DATA is *NOT* populated. 704 | ; http://php.net/always-populate-raw-post-data 705 | ;always_populate_raw_post_data = -1 706 | 707 | ;;;;;;;;;;;;;;;;;;;;;;;;; 708 | ; Paths and Directories ; 709 | ;;;;;;;;;;;;;;;;;;;;;;;;; 710 | 711 | ; UNIX: "/path1:/path2" 712 | ;include_path = ".:/php/includes" 713 | ; 714 | ; Windows: "\path1;\path2" 715 | ;include_path = ".;c:\php\includes" 716 | ; 717 | ; PHP's default setting for include_path is ".;/path/to/php/pear" 718 | ; http://php.net/include-path 719 | 720 | ; The root of the PHP pages, used only if nonempty. 721 | ; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root 722 | ; if you are running php as a CGI under any web server (other than IIS) 723 | ; see documentation for security issues. The alternate is to use the 724 | ; cgi.force_redirect configuration below 725 | ; http://php.net/doc-root 726 | doc_root = 727 | 728 | ; The directory under which PHP opens the script using /~username used only 729 | ; if nonempty. 730 | ; http://php.net/user-dir 731 | user_dir = 732 | 733 | ; Directory in which the loadable extensions (modules) reside. 734 | ; http://php.net/extension-dir 735 | ; extension_dir = "./" 736 | ; On windows: 737 | ; extension_dir = "ext" 738 | 739 | ; Directory where the temporary files should be placed. 740 | ; Defaults to the system default (see sys_get_temp_dir) 741 | ; sys_temp_dir = "/tmp" 742 | 743 | ; Whether or not to enable the dl() function. The dl() function does NOT work 744 | ; properly in multithreaded servers, such as IIS or Zeus, and is automatically 745 | ; disabled on them. 746 | ; http://php.net/enable-dl 747 | enable_dl = Off 748 | 749 | ; cgi.force_redirect is necessary to provide security running PHP as a CGI under 750 | ; most web servers. Left undefined, PHP turns this on by default. You can 751 | ; turn it off here AT YOUR OWN RISK 752 | ; **You CAN safely turn this off for IIS, in fact, you MUST.** 753 | ; http://php.net/cgi.force-redirect 754 | ;cgi.force_redirect = 1 755 | 756 | ; if cgi.nph is enabled it will force cgi to always sent Status: 200 with 757 | ; every request. PHP's default behavior is to disable this feature. 758 | ;cgi.nph = 1 759 | 760 | ; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape 761 | ; (iPlanet) web servers, you MAY need to set an environment variable name that PHP 762 | ; will look for to know it is OK to continue execution. Setting this variable MAY 763 | ; cause security issues, KNOW WHAT YOU ARE DOING FIRST. 764 | ; http://php.net/cgi.redirect-status-env 765 | ;cgi.redirect_status_env = 766 | 767 | ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's 768 | ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok 769 | ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting 770 | ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting 771 | ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts 772 | ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. 773 | ; http://php.net/cgi.fix-pathinfo 774 | ;cgi.fix_pathinfo=1 775 | 776 | ; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate 777 | ; security tokens of the calling client. This allows IIS to define the 778 | ; security context that the request runs under. mod_fastcgi under Apache 779 | ; does not currently support this feature (03/17/2002) 780 | ; Set to 1 if running under IIS. Default is zero. 781 | ; http://php.net/fastcgi.impersonate 782 | ;fastcgi.impersonate = 1 783 | 784 | ; Disable logging through FastCGI connection. PHP's default behavior is to enable 785 | ; this feature. 786 | ;fastcgi.logging = 0 787 | 788 | ; cgi.rfc2616_headers configuration option tells PHP what type of headers to 789 | ; use when sending HTTP response code. If set to 0, PHP sends Status: header that 790 | ; is supported by Apache. When this option is set to 1, PHP will send 791 | ; RFC2616 compliant header. 792 | ; Default is zero. 793 | ; http://php.net/cgi.rfc2616-headers 794 | ;cgi.rfc2616_headers = 0 795 | 796 | ;;;;;;;;;;;;;;;; 797 | ; File Uploads ; 798 | ;;;;;;;;;;;;;;;; 799 | 800 | ; Whether to allow HTTP file uploads. 801 | ; http://php.net/file-uploads 802 | file_uploads = On 803 | 804 | ; Temporary directory for HTTP uploaded files (will use system default if not 805 | ; specified). 806 | ; http://php.net/upload-tmp-dir 807 | ;upload_tmp_dir = 808 | 809 | ; Maximum allowed size for uploaded files. 810 | ; http://php.net/upload-max-filesize 811 | upload_max_filesize = 2M 812 | 813 | ; Maximum number of files that can be uploaded via a single request 814 | max_file_uploads = 20 815 | 816 | ;;;;;;;;;;;;;;;;;; 817 | ; Fopen wrappers ; 818 | ;;;;;;;;;;;;;;;;;; 819 | 820 | ; Whether to allow the treatment of URLs (like http:// or ftp://) as files. 821 | ; http://php.net/allow-url-fopen 822 | allow_url_fopen = On 823 | 824 | ; Whether to allow include/require to open URLs (like http:// or ftp://) as files. 825 | ; http://php.net/allow-url-include 826 | allow_url_include = Off 827 | 828 | ; Define the anonymous ftp password (your email address). PHP's default setting 829 | ; for this is empty. 830 | ; http://php.net/from 831 | ;from="john@doe.com" 832 | 833 | ; Define the User-Agent string. PHP's default setting for this is empty. 834 | ; http://php.net/user-agent 835 | ;user_agent="PHP" 836 | 837 | ; Default timeout for socket based streams (seconds) 838 | ; http://php.net/default-socket-timeout 839 | default_socket_timeout = 60 840 | 841 | ; If your scripts have to deal with files from Macintosh systems, 842 | ; or you are running on a Mac and need to deal with files from 843 | ; unix or win32 systems, setting this flag will cause PHP to 844 | ; automatically detect the EOL character in those files so that 845 | ; fgets() and file() will work regardless of the source of the file. 846 | ; http://php.net/auto-detect-line-endings 847 | ;auto_detect_line_endings = Off 848 | 849 | ;;;;;;;;;;;;;;;;;;;;;; 850 | ; Dynamic Extensions ; 851 | ;;;;;;;;;;;;;;;;;;;;;; 852 | 853 | ; If you wish to have an extension loaded automatically, use the following 854 | ; syntax: 855 | ; 856 | ; extension=modulename.extension 857 | ; 858 | ; For example, on Windows: 859 | ; 860 | ; extension=msql.dll 861 | ; 862 | ; ... or under UNIX: 863 | ; 864 | ; extension=msql.so 865 | ; 866 | ; ... or with a path: 867 | ; 868 | ; extension=/path/to/extension/msql.so 869 | ; 870 | ; If you only provide the name of the extension, PHP will look for it in its 871 | ; default extension directory. 872 | extension=mongo.so 873 | ;;;; 874 | ; Note: packaged extension modules are now loaded via the .ini files 875 | ; found in the directory /etc/php.d; these are loaded by default. 876 | ;;;; 877 | 878 | ;;;;;;;;;;;;;;;;;;; 879 | ; Module Settings ; 880 | ;;;;;;;;;;;;;;;;;;; 881 | [CLI Server] 882 | ; Whether the CLI web server uses ANSI color coding in its terminal output. 883 | cli_server.color = On 884 | 885 | [Date] 886 | ; Defines the default timezone used by the date functions 887 | ; http://php.net/date.timezone 888 | date.timezone = Europe/Moscow 889 | 890 | ; http://php.net/date.default-latitude 891 | ;date.default_latitude = 31.7667 892 | 893 | ; http://php.net/date.default-longitude 894 | ;date.default_longitude = 35.2333 895 | 896 | ; http://php.net/date.sunrise-zenith 897 | ;date.sunrise_zenith = 90.583333 898 | 899 | ; http://php.net/date.sunset-zenith 900 | ;date.sunset_zenith = 90.583333 901 | 902 | [filter] 903 | ; http://php.net/filter.default 904 | ;filter.default = unsafe_raw 905 | 906 | ; http://php.net/filter.default-flags 907 | ;filter.default_flags = 908 | 909 | [iconv] 910 | ; Use of this INI entory is deprecated, use global input_encoding instead. 911 | ; If empty, input_encoding is used. 912 | ;iconv.input_encoding = 913 | 914 | ; Use of this INI entory is deprecated, use global internal_encoding instead. 915 | ; If empty, internal_encoding is used. 916 | ;iconv.internal_encoding = 917 | 918 | ; Use of this INI entory is deprecated, use global output_encoding instead. 919 | ; If empty, output_encoding is used. 920 | ;iconv.output_encoding = 921 | 922 | [intl] 923 | ;intl.default_locale = 924 | ; This directive allows you to produce PHP errors when some error 925 | ; happens within intl functions. The value is the level of the error produced. 926 | ; Default is 0, which does not produce any errors. 927 | ;intl.error_level = E_WARNING 928 | 929 | [sqlite] 930 | ; http://php.net/sqlite.assoc-case 931 | ;sqlite.assoc_case = 0 932 | 933 | [sqlite3] 934 | ;sqlite3.extension_dir = 935 | 936 | [Pcre] 937 | ;PCRE library backtracking limit. 938 | ; http://php.net/pcre.backtrack-limit 939 | ;pcre.backtrack_limit=100000 940 | 941 | ;PCRE library recursion limit. 942 | ;Please note that if you set this value to a high number you may consume all 943 | ;the available process stack and eventually crash PHP (due to reaching the 944 | ;stack size limit imposed by the Operating System). 945 | ; http://php.net/pcre.recursion-limit 946 | ;pcre.recursion_limit=100000 947 | 948 | [Pdo] 949 | ; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off" 950 | ; http://php.net/pdo-odbc.connection-pooling 951 | ;pdo_odbc.connection_pooling=strict 952 | 953 | ;pdo_odbc.db2_instance_name 954 | 955 | [Pdo_mysql] 956 | ; If mysqlnd is used: Number of cache slots for the internal result set cache 957 | ; http://php.net/pdo_mysql.cache_size 958 | pdo_mysql.cache_size = 2000 959 | 960 | ; Default socket name for local MySQL connects. If empty, uses the built-in 961 | ; MySQL defaults. 962 | ; http://php.net/pdo_mysql.default-socket 963 | pdo_mysql.default_socket= 964 | 965 | [Phar] 966 | ; http://php.net/phar.readonly 967 | ;phar.readonly = On 968 | 969 | ; http://php.net/phar.require-hash 970 | ;phar.require_hash = On 971 | 972 | ;phar.cache_list = 973 | 974 | [mail function] 975 | ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). 976 | ; http://php.net/sendmail-path 977 | sendmail_path = /usr/sbin/sendmail -t -i 978 | 979 | ; Force the addition of the specified parameters to be passed as extra parameters 980 | ; to the sendmail binary. These parameters will always replace the value of 981 | ; the 5th parameter to mail(), even in safe mode. 982 | ;mail.force_extra_parameters = 983 | 984 | ; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename 985 | mail.add_x_header = On 986 | 987 | ; The path to a log file that will log all mail() calls. Log entries include 988 | ; the full path of the script, line number, To address and headers. 989 | ;mail.log = 990 | ; Log mail to syslog (Event Log on NT, not valid in Windows 95). 991 | ;mail.log = syslog 992 | 993 | [SQL] 994 | ; http://php.net/sql.safe-mode 995 | sql.safe_mode = Off 996 | 997 | [ODBC] 998 | ; http://php.net/odbc.default-db 999 | ;odbc.default_db = Not yet implemented 1000 | 1001 | ; http://php.net/odbc.default-user 1002 | ;odbc.default_user = Not yet implemented 1003 | 1004 | ; http://php.net/odbc.default-pw 1005 | ;odbc.default_pw = Not yet implemented 1006 | 1007 | ; Controls the ODBC cursor model. 1008 | ; Default: SQL_CURSOR_STATIC (default). 1009 | ;odbc.default_cursortype 1010 | 1011 | ; Allow or prevent persistent links. 1012 | ; http://php.net/odbc.allow-persistent 1013 | odbc.allow_persistent = On 1014 | 1015 | ; Check that a connection is still valid before reuse. 1016 | ; http://php.net/odbc.check-persistent 1017 | odbc.check_persistent = On 1018 | 1019 | ; Maximum number of persistent links. -1 means no limit. 1020 | ; http://php.net/odbc.max-persistent 1021 | odbc.max_persistent = -1 1022 | 1023 | ; Maximum number of links (persistent + non-persistent). -1 means no limit. 1024 | ; http://php.net/odbc.max-links 1025 | odbc.max_links = -1 1026 | 1027 | ; Handling of LONG fields. Returns number of bytes to variables. 0 means 1028 | ; passthru. 1029 | ; http://php.net/odbc.defaultlrl 1030 | odbc.defaultlrl = 4096 1031 | 1032 | ; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. 1033 | ; See the documentation on odbc_binmode and odbc_longreadlen for an explanation 1034 | ; of odbc.defaultlrl and odbc.defaultbinmode 1035 | ; http://php.net/odbc.defaultbinmode 1036 | odbc.defaultbinmode = 1 1037 | 1038 | ;birdstep.max_links = -1 1039 | 1040 | [Interbase] 1041 | ; Allow or prevent persistent links. 1042 | ibase.allow_persistent = 1 1043 | 1044 | ; Maximum number of persistent links. -1 means no limit. 1045 | ibase.max_persistent = -1 1046 | 1047 | ; Maximum number of links (persistent + non-persistent). -1 means no limit. 1048 | ibase.max_links = -1 1049 | 1050 | ; Default database name for ibase_connect(). 1051 | ;ibase.default_db = 1052 | 1053 | ; Default username for ibase_connect(). 1054 | ;ibase.default_user = 1055 | 1056 | ; Default password for ibase_connect(). 1057 | ;ibase.default_password = 1058 | 1059 | ; Default charset for ibase_connect(). 1060 | ;ibase.default_charset = 1061 | 1062 | ; Default timestamp format. 1063 | ibase.timestampformat = "%Y-%m-%d %H:%M:%S" 1064 | 1065 | ; Default date format. 1066 | ibase.dateformat = "%Y-%m-%d" 1067 | 1068 | ; Default time format. 1069 | ibase.timeformat = "%H:%M:%S" 1070 | 1071 | [MySQL] 1072 | ; Allow accessing, from PHP's perspective, local files with LOAD DATA statements 1073 | ; http://php.net/mysql.allow_local_infile 1074 | mysql.allow_local_infile = On 1075 | 1076 | ; Allow or prevent persistent links. 1077 | ; http://php.net/mysql.allow-persistent 1078 | mysql.allow_persistent = On 1079 | 1080 | ; If mysqlnd is used: Number of cache slots for the internal result set cache 1081 | ; http://php.net/mysql.cache_size 1082 | mysql.cache_size = 2000 1083 | 1084 | ; Maximum number of persistent links. -1 means no limit. 1085 | ; http://php.net/mysql.max-persistent 1086 | mysql.max_persistent = -1 1087 | 1088 | ; Maximum number of links (persistent + non-persistent). -1 means no limit. 1089 | ; http://php.net/mysql.max-links 1090 | mysql.max_links = -1 1091 | 1092 | ; Default port number for mysql_connect(). If unset, mysql_connect() will use 1093 | ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the 1094 | ; compile-time value defined MYSQL_PORT (in that order). Win32 will only look 1095 | ; at MYSQL_PORT. 1096 | ; http://php.net/mysql.default-port 1097 | mysql.default_port = 1098 | 1099 | ; Default socket name for local MySQL connects. If empty, uses the built-in 1100 | ; MySQL defaults. 1101 | ; http://php.net/mysql.default-socket 1102 | mysql.default_socket = 1103 | 1104 | ; Default host for mysql_connect() (doesn't apply in safe mode). 1105 | ; http://php.net/mysql.default-host 1106 | mysql.default_host = 1107 | 1108 | ; Default user for mysql_connect() (doesn't apply in safe mode). 1109 | ; http://php.net/mysql.default-user 1110 | mysql.default_user = 1111 | 1112 | ; Default password for mysql_connect() (doesn't apply in safe mode). 1113 | ; Note that this is generally a *bad* idea to store passwords in this file. 1114 | ; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password") 1115 | ; and reveal this password! And of course, any users with read access to this 1116 | ; file will be able to reveal the password as well. 1117 | ; http://php.net/mysql.default-password 1118 | mysql.default_password = 1119 | 1120 | ; Maximum time (in seconds) for connect timeout. -1 means no limit 1121 | ; http://php.net/mysql.connect-timeout 1122 | mysql.connect_timeout = 60 1123 | 1124 | ; Trace mode. When trace_mode is active (=On), warnings for table/index scans and 1125 | ; SQL-Errors will be displayed. 1126 | ; http://php.net/mysql.trace-mode 1127 | mysql.trace_mode = Off 1128 | 1129 | [MySQLi] 1130 | 1131 | ; Maximum number of persistent links. -1 means no limit. 1132 | ; http://php.net/mysqli.max-persistent 1133 | mysqli.max_persistent = -1 1134 | 1135 | ; Allow accessing, from PHP's perspective, local files with LOAD DATA statements 1136 | ; http://php.net/mysqli.allow_local_infile 1137 | ;mysqli.allow_local_infile = On 1138 | 1139 | ; Allow or prevent persistent links. 1140 | ; http://php.net/mysqli.allow-persistent 1141 | mysqli.allow_persistent = On 1142 | 1143 | ; Maximum number of links. -1 means no limit. 1144 | ; http://php.net/mysqli.max-links 1145 | mysqli.max_links = -1 1146 | 1147 | ; If mysqlnd is used: Number of cache slots for the internal result set cache 1148 | ; http://php.net/mysqli.cache_size 1149 | mysqli.cache_size = 2000 1150 | 1151 | ; Default port number for mysqli_connect(). If unset, mysqli_connect() will use 1152 | ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the 1153 | ; compile-time value defined MYSQL_PORT (in that order). Win32 will only look 1154 | ; at MYSQL_PORT. 1155 | ; http://php.net/mysqli.default-port 1156 | mysqli.default_port = 3306 1157 | 1158 | ; Default socket name for local MySQL connects. If empty, uses the built-in 1159 | ; MySQL defaults. 1160 | ; http://php.net/mysqli.default-socket 1161 | mysqli.default_socket = 1162 | 1163 | ; Default host for mysql_connect() (doesn't apply in safe mode). 1164 | ; http://php.net/mysqli.default-host 1165 | mysqli.default_host = 1166 | 1167 | ; Default user for mysql_connect() (doesn't apply in safe mode). 1168 | ; http://php.net/mysqli.default-user 1169 | mysqli.default_user = 1170 | 1171 | ; Default password for mysqli_connect() (doesn't apply in safe mode). 1172 | ; Note that this is generally a *bad* idea to store passwords in this file. 1173 | ; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") 1174 | ; and reveal this password! And of course, any users with read access to this 1175 | ; file will be able to reveal the password as well. 1176 | ; http://php.net/mysqli.default-pw 1177 | mysqli.default_pw = 1178 | 1179 | ; Allow or prevent reconnect 1180 | mysqli.reconnect = Off 1181 | 1182 | [mysqlnd] 1183 | ; Enable / Disable collection of general statistics by mysqlnd which can be 1184 | ; used to tune and monitor MySQL operations. 1185 | ; http://php.net/mysqlnd.collect_statistics 1186 | mysqlnd.collect_statistics = On 1187 | 1188 | ; Enable / Disable collection of memory usage statistics by mysqlnd which can be 1189 | ; used to tune and monitor MySQL operations. 1190 | ; http://php.net/mysqlnd.collect_memory_statistics 1191 | mysqlnd.collect_memory_statistics = Off 1192 | 1193 | ; Size of a pre-allocated buffer used when sending commands to MySQL in bytes. 1194 | ; http://php.net/mysqlnd.net_cmd_buffer_size 1195 | ;mysqlnd.net_cmd_buffer_size = 2048 1196 | 1197 | ; Size of a pre-allocated buffer used for reading data sent by the server in 1198 | ; bytes. 1199 | ; http://php.net/mysqlnd.net_read_buffer_size 1200 | ;mysqlnd.net_read_buffer_size = 32768 1201 | 1202 | [OCI8] 1203 | 1204 | ; Connection: Enables privileged connections using external 1205 | ; credentials (OCI_SYSOPER, OCI_SYSDBA) 1206 | ; http://php.net/oci8.privileged-connect 1207 | ;oci8.privileged_connect = Off 1208 | 1209 | ; Connection: The maximum number of persistent OCI8 connections per 1210 | ; process. Using -1 means no limit. 1211 | ; http://php.net/oci8.max-persistent 1212 | ;oci8.max_persistent = -1 1213 | 1214 | ; Connection: The maximum number of seconds a process is allowed to 1215 | ; maintain an idle persistent connection. Using -1 means idle 1216 | ; persistent connections will be maintained forever. 1217 | ; http://php.net/oci8.persistent-timeout 1218 | ;oci8.persistent_timeout = -1 1219 | 1220 | ; Connection: The number of seconds that must pass before issuing a 1221 | ; ping during oci_pconnect() to check the connection validity. When 1222 | ; set to 0, each oci_pconnect() will cause a ping. Using -1 disables 1223 | ; pings completely. 1224 | ; http://php.net/oci8.ping-interval 1225 | ;oci8.ping_interval = 60 1226 | 1227 | ; Connection: Set this to a user chosen connection class to be used 1228 | ; for all pooled server requests with Oracle 11g Database Resident 1229 | ; Connection Pooling (DRCP). To use DRCP, this value should be set to 1230 | ; the same string for all web servers running the same application, 1231 | ; the database pool must be configured, and the connection string must 1232 | ; specify to use a pooled server. 1233 | ;oci8.connection_class = 1234 | 1235 | ; High Availability: Using On lets PHP receive Fast Application 1236 | ; Notification (FAN) events generated when a database node fails. The 1237 | ; database must also be configured to post FAN events. 1238 | ;oci8.events = Off 1239 | 1240 | ; Tuning: This option enables statement caching, and specifies how 1241 | ; many statements to cache. Using 0 disables statement caching. 1242 | ; http://php.net/oci8.statement-cache-size 1243 | ;oci8.statement_cache_size = 20 1244 | 1245 | ; Tuning: Enables statement prefetching and sets the default number of 1246 | ; rows that will be fetched automatically after statement execution. 1247 | ; http://php.net/oci8.default-prefetch 1248 | ;oci8.default_prefetch = 100 1249 | 1250 | ; Compatibility. Using On means oci_close() will not close 1251 | ; oci_connect() and oci_new_connect() connections. 1252 | ; http://php.net/oci8.old-oci-close-semantics 1253 | ;oci8.old_oci_close_semantics = Off 1254 | 1255 | [PostgreSQL] 1256 | ; Allow or prevent persistent links. 1257 | ; http://php.net/pgsql.allow-persistent 1258 | pgsql.allow_persistent = On 1259 | 1260 | ; Detect broken persistent links always with pg_pconnect(). 1261 | ; Auto reset feature requires a little overheads. 1262 | ; http://php.net/pgsql.auto-reset-persistent 1263 | pgsql.auto_reset_persistent = Off 1264 | 1265 | ; Maximum number of persistent links. -1 means no limit. 1266 | ; http://php.net/pgsql.max-persistent 1267 | pgsql.max_persistent = -1 1268 | 1269 | ; Maximum number of links (persistent+non persistent). -1 means no limit. 1270 | ; http://php.net/pgsql.max-links 1271 | pgsql.max_links = -1 1272 | 1273 | ; Ignore PostgreSQL backends Notice message or not. 1274 | ; Notice message logging require a little overheads. 1275 | ; http://php.net/pgsql.ignore-notice 1276 | pgsql.ignore_notice = 0 1277 | 1278 | ; Log PostgreSQL backends Notice message or not. 1279 | ; Unless pgsql.ignore_notice=0, module cannot log notice message. 1280 | ; http://php.net/pgsql.log-notice 1281 | pgsql.log_notice = 0 1282 | 1283 | [Sybase-CT] 1284 | ; Allow or prevent persistent links. 1285 | ; http://php.net/sybct.allow-persistent 1286 | sybct.allow_persistent = On 1287 | 1288 | ; Maximum number of persistent links. -1 means no limit. 1289 | ; http://php.net/sybct.max-persistent 1290 | sybct.max_persistent = -1 1291 | 1292 | ; Maximum number of links (persistent + non-persistent). -1 means no limit. 1293 | ; http://php.net/sybct.max-links 1294 | sybct.max_links = -1 1295 | 1296 | ; Minimum server message severity to display. 1297 | ; http://php.net/sybct.min-server-severity 1298 | sybct.min_server_severity = 10 1299 | 1300 | ; Minimum client message severity to display. 1301 | ; http://php.net/sybct.min-client-severity 1302 | sybct.min_client_severity = 10 1303 | 1304 | ; Set per-context timeout 1305 | ; http://php.net/sybct.timeout 1306 | ;sybct.timeout= 1307 | 1308 | ;sybct.packet_size 1309 | 1310 | ; The maximum time in seconds to wait for a connection attempt to succeed before returning failure. 1311 | ; Default: one minute 1312 | ;sybct.login_timeout= 1313 | 1314 | ; The name of the host you claim to be connecting from, for display by sp_who. 1315 | ; Default: none 1316 | ;sybct.hostname= 1317 | 1318 | ; Allows you to define how often deadlocks are to be retried. -1 means "forever". 1319 | ; Default: 0 1320 | ;sybct.deadlock_retry_count= 1321 | 1322 | [bcmath] 1323 | ; Number of decimal digits for all bcmath functions. 1324 | ; http://php.net/bcmath.scale 1325 | bcmath.scale = 0 1326 | 1327 | [browscap] 1328 | ; http://php.net/browscap 1329 | ;browscap = extra/browscap.ini 1330 | 1331 | [Session] 1332 | ; Handler used to store/retrieve data. 1333 | ; http://php.net/session.save-handler 1334 | session.save_handler = files 1335 | 1336 | ; Argument passed to save_handler. In the case of files, this is the path 1337 | ; where data files are stored. Note: Windows users have to change this 1338 | ; variable in order to use PHP's session functions. 1339 | ; 1340 | ; The path can be defined as: 1341 | ; 1342 | ; session.save_path = "N;/path" 1343 | ; 1344 | ; where N is an integer. Instead of storing all the session files in 1345 | ; /path, what this will do is use subdirectories N-levels deep, and 1346 | ; store the session data in those directories. This is useful if 1347 | ; your OS has problems with many files in one directory, and is 1348 | ; a more efficient layout for servers that handle many sessions. 1349 | ; 1350 | ; NOTE 1: PHP will not create this directory structure automatically. 1351 | ; You can use the script in the ext/session dir for that purpose. 1352 | ; NOTE 2: See the section on garbage collection below if you choose to 1353 | ; use subdirectories for session storage 1354 | ; 1355 | ; The file storage module creates files using mode 600 by default. 1356 | ; You can change that by using 1357 | ; 1358 | ; session.save_path = "N;MODE;/path" 1359 | ; 1360 | ; where MODE is the octal representation of the mode. Note that this 1361 | ; does not overwrite the process's umask. 1362 | ; http://php.net/session.save-path 1363 | 1364 | ; RPM note : session directory must be owned by process owner 1365 | ; for mod_php, see /etc/httpd/conf.d/php.conf 1366 | ; for php-fpm, see /etc/php-fpm.d/*conf 1367 | ;session.save_path = "/tmp" 1368 | 1369 | ; Whether to use strict session mode. 1370 | ; Strict session mode does not accept uninitialized session ID and regenerate 1371 | ; session ID if browser sends uninitialized session ID. Strict mode protects 1372 | ; applications from session fixation via session adoption vulnerability. It is 1373 | ; disabled by default for maximum compatibility, but enabling it is encouraged. 1374 | ; https://wiki.php.net/rfc/strict_sessions 1375 | session.use_strict_mode = 0 1376 | 1377 | ; Whether to use cookies. 1378 | ; http://php.net/session.use-cookies 1379 | session.use_cookies = 1 1380 | 1381 | ; http://php.net/session.cookie-secure 1382 | ;session.cookie_secure = 1383 | 1384 | ; This option forces PHP to fetch and use a cookie for storing and maintaining 1385 | ; the session id. We encourage this operation as it's very helpful in combating 1386 | ; session hijacking when not specifying and managing your own session id. It is 1387 | ; not the be-all and end-all of session hijacking defense, but it's a good start. 1388 | ; http://php.net/session.use-only-cookies 1389 | session.use_only_cookies = 1 1390 | 1391 | ; Name of the session (used as cookie name). 1392 | ; http://php.net/session.name 1393 | session.name = PHPSESSID 1394 | 1395 | ; Initialize session on request startup. 1396 | ; http://php.net/session.auto-start 1397 | session.auto_start = 0 1398 | 1399 | ; Lifetime in seconds of cookie or, if 0, until browser is restarted. 1400 | ; http://php.net/session.cookie-lifetime 1401 | session.cookie_lifetime = 0 1402 | 1403 | ; The path for which the cookie is valid. 1404 | ; http://php.net/session.cookie-path 1405 | session.cookie_path = / 1406 | 1407 | ; The domain for which the cookie is valid. 1408 | ; http://php.net/session.cookie-domain 1409 | session.cookie_domain = 1410 | 1411 | ; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript. 1412 | ; http://php.net/session.cookie-httponly 1413 | session.cookie_httponly = 1414 | 1415 | ; Handler used to serialize data. php is the standard serializer of PHP. 1416 | ; http://php.net/session.serialize-handler 1417 | session.serialize_handler = php 1418 | 1419 | ; Defines the probability that the 'garbage collection' process is started 1420 | ; on every session initialization. The probability is calculated by using 1421 | ; gc_probability/gc_divisor. Where session.gc_probability is the numerator 1422 | ; and gc_divisor is the denominator in the equation. Setting this value to 1 1423 | ; when the session.gc_divisor value is 100 will give you approximately a 1% chance 1424 | ; the gc will run on any give request. 1425 | ; Default Value: 1 1426 | ; Development Value: 1 1427 | ; Production Value: 1 1428 | ; http://php.net/session.gc-probability 1429 | session.gc_probability = 1 1430 | 1431 | ; Defines the probability that the 'garbage collection' process is started on every 1432 | ; session initialization. The probability is calculated by using the following equation: 1433 | ; gc_probability/gc_divisor. Where session.gc_probability is the numerator and 1434 | ; session.gc_divisor is the denominator in the equation. Setting this value to 1 1435 | ; when the session.gc_divisor value is 100 will give you approximately a 1% chance 1436 | ; the gc will run on any give request. Increasing this value to 1000 will give you 1437 | ; a 0.1% chance the gc will run on any give request. For high volume production servers, 1438 | ; this is a more efficient approach. 1439 | ; Default Value: 100 1440 | ; Development Value: 1000 1441 | ; Production Value: 1000 1442 | ; http://php.net/session.gc-divisor 1443 | session.gc_divisor = 1000 1444 | 1445 | ; After this number of seconds, stored data will be seen as 'garbage' and 1446 | ; cleaned up by the garbage collection process. 1447 | ; http://php.net/session.gc-maxlifetime 1448 | session.gc_maxlifetime = 1440 1449 | 1450 | ; NOTE: If you are using the subdirectory option for storing session files 1451 | ; (see session.save_path above), then garbage collection does *not* 1452 | ; happen automatically. You will need to do your own garbage 1453 | ; collection through a shell script, cron entry, or some other method. 1454 | ; For example, the following script would is the equivalent of 1455 | ; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): 1456 | ; find /path/to/sessions -cmin +24 -type f | xargs rm 1457 | 1458 | ; Check HTTP Referer to invalidate externally stored URLs containing ids. 1459 | ; HTTP_REFERER has to contain this substring for the session to be 1460 | ; considered as valid. 1461 | ; http://php.net/session.referer-check 1462 | session.referer_check = 1463 | 1464 | ; How many bytes to read from the file. 1465 | ; http://php.net/session.entropy-length 1466 | ;session.entropy_length = 32 1467 | 1468 | ; Specified here to create the session id. 1469 | ; http://php.net/session.entropy-file 1470 | ; Defaults to /dev/urandom 1471 | ; On systems that don't have /dev/urandom but do have /dev/arandom, this will default to /dev/arandom 1472 | ; If neither are found at compile time, the default is no entropy file. 1473 | ; On windows, setting the entropy_length setting will activate the 1474 | ; Windows random source (using the CryptoAPI) 1475 | ;session.entropy_file = /dev/urandom 1476 | 1477 | ; Set to {nocache,private,public,} to determine HTTP caching aspects 1478 | ; or leave this empty to avoid sending anti-caching headers. 1479 | ; http://php.net/session.cache-limiter 1480 | session.cache_limiter = nocache 1481 | 1482 | ; Document expires after n minutes. 1483 | ; http://php.net/session.cache-expire 1484 | session.cache_expire = 180 1485 | 1486 | ; trans sid support is disabled by default. 1487 | ; Use of trans sid may risk your users' security. 1488 | ; Use this option with caution. 1489 | ; - User may send URL contains active session ID 1490 | ; to other person via. email/irc/etc. 1491 | ; - URL that contains active session ID may be stored 1492 | ; in publicly accessible computer. 1493 | ; - User may access your site with the same session ID 1494 | ; always using URL stored in browser's history or bookmarks. 1495 | ; http://php.net/session.use-trans-sid 1496 | session.use_trans_sid = 0 1497 | 1498 | ; Select a hash function for use in generating session ids. 1499 | ; Possible Values 1500 | ; 0 (MD5 128 bits) 1501 | ; 1 (SHA-1 160 bits) 1502 | ; This option may also be set to the name of any hash function supported by 1503 | ; the hash extension. A list of available hashes is returned by the hash_algos() 1504 | ; function. 1505 | ; http://php.net/session.hash-function 1506 | session.hash_function = 0 1507 | 1508 | ; Define how many bits are stored in each character when converting 1509 | ; the binary hash data to something readable. 1510 | ; Possible values: 1511 | ; 4 (4 bits: 0-9, a-f) 1512 | ; 5 (5 bits: 0-9, a-v) 1513 | ; 6 (6 bits: 0-9, a-z, A-Z, "-", ",") 1514 | ; Default Value: 4 1515 | ; Development Value: 5 1516 | ; Production Value: 5 1517 | ; http://php.net/session.hash-bits-per-character 1518 | session.hash_bits_per_character = 5 1519 | 1520 | ; The URL rewriter will look for URLs in a defined set of HTML tags. 1521 | ; form/fieldset are special; if you include them here, the rewriter will 1522 | ; add a hidden field with the info which is otherwise appended 1523 | ; to URLs. If you want XHTML conformity, remove the form entry. 1524 | ; Note that all valid entries require a "=", even if no value follows. 1525 | ; Default Value: "a=href,area=href,frame=src,form=,fieldset=" 1526 | ; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry" 1527 | ; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry" 1528 | ; http://php.net/url-rewriter.tags 1529 | url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" 1530 | 1531 | ; Enable upload progress tracking in $_SESSION 1532 | ; Default Value: On 1533 | ; Development Value: On 1534 | ; Production Value: On 1535 | ; http://php.net/session.upload-progress.enabled 1536 | ;session.upload_progress.enabled = On 1537 | 1538 | ; Cleanup the progress information as soon as all POST data has been read 1539 | ; (i.e. upload completed). 1540 | ; Default Value: On 1541 | ; Development Value: On 1542 | ; Production Value: On 1543 | ; http://php.net/session.upload-progress.cleanup 1544 | ;session.upload_progress.cleanup = On 1545 | 1546 | ; A prefix used for the upload progress key in $_SESSION 1547 | ; Default Value: "upload_progress_" 1548 | ; Development Value: "upload_progress_" 1549 | ; Production Value: "upload_progress_" 1550 | ; http://php.net/session.upload-progress.prefix 1551 | ;session.upload_progress.prefix = "upload_progress_" 1552 | 1553 | ; The index name (concatenated with the prefix) in $_SESSION 1554 | ; containing the upload progress information 1555 | ; Default Value: "PHP_SESSION_UPLOAD_PROGRESS" 1556 | ; Development Value: "PHP_SESSION_UPLOAD_PROGRESS" 1557 | ; Production Value: "PHP_SESSION_UPLOAD_PROGRESS" 1558 | ; http://php.net/session.upload-progress.name 1559 | ;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS" 1560 | 1561 | ; How frequently the upload progress should be updated. 1562 | ; Given either in percentages (per-file), or in bytes 1563 | ; Default Value: "1%" 1564 | ; Development Value: "1%" 1565 | ; Production Value: "1%" 1566 | ; http://php.net/session.upload-progress.freq 1567 | ;session.upload_progress.freq = "1%" 1568 | 1569 | ; The minimum delay between updates, in seconds 1570 | ; Default Value: 1 1571 | ; Development Value: 1 1572 | ; Production Value: 1 1573 | ; http://php.net/session.upload-progress.min-freq 1574 | ;session.upload_progress.min_freq = "1" 1575 | 1576 | [MSSQL] 1577 | ; Allow or prevent persistent links. 1578 | mssql.allow_persistent = On 1579 | 1580 | ; Maximum number of persistent links. -1 means no limit. 1581 | mssql.max_persistent = -1 1582 | 1583 | ; Maximum number of links (persistent+non persistent). -1 means no limit. 1584 | mssql.max_links = -1 1585 | 1586 | ; Minimum error severity to display. 1587 | mssql.min_error_severity = 10 1588 | 1589 | ; Minimum message severity to display. 1590 | mssql.min_message_severity = 10 1591 | 1592 | ; Compatibility mode with old versions of PHP 3.0. 1593 | mssql.compatibility_mode = Off 1594 | 1595 | ; Connect timeout 1596 | ;mssql.connect_timeout = 5 1597 | 1598 | ; Query timeout 1599 | ;mssql.timeout = 60 1600 | 1601 | ; Valid range 0 - 2147483647. Default = 4096. 1602 | ;mssql.textlimit = 4096 1603 | 1604 | ; Valid range 0 - 2147483647. Default = 4096. 1605 | ;mssql.textsize = 4096 1606 | 1607 | ; Limits the number of records in each batch. 0 = all records in one batch. 1608 | ;mssql.batchsize = 0 1609 | 1610 | ; Specify how datetime and datetim4 columns are returned 1611 | ; On => Returns data converted to SQL server settings 1612 | ; Off => Returns values as YYYY-MM-DD hh:mm:ss 1613 | ;mssql.datetimeconvert = On 1614 | 1615 | ; Use NT authentication when connecting to the server 1616 | mssql.secure_connection = Off 1617 | 1618 | ; Specify max number of processes. -1 = library default 1619 | ; msdlib defaults to 25 1620 | ; FreeTDS defaults to 4096 1621 | ;mssql.max_procs = -1 1622 | 1623 | ; Specify client character set. 1624 | ; If empty or not set the client charset from freetds.conf is used 1625 | ; This is only used when compiled with FreeTDS 1626 | ;mssql.charset = "ISO-8859-1" 1627 | 1628 | [Assertion] 1629 | ; Assert(expr); active by default. 1630 | ; http://php.net/assert.active 1631 | ;assert.active = On 1632 | 1633 | ; Issue a PHP warning for each failed assertion. 1634 | ; http://php.net/assert.warning 1635 | ;assert.warning = On 1636 | 1637 | ; Don't bail out by default. 1638 | ; http://php.net/assert.bail 1639 | ;assert.bail = Off 1640 | 1641 | ; User-function to be called if an assertion fails. 1642 | ; http://php.net/assert.callback 1643 | ;assert.callback = 0 1644 | 1645 | ; Eval the expression with current error_reporting(). Set to true if you want 1646 | ; error_reporting(0) around the eval(). 1647 | ; http://php.net/assert.quiet-eval 1648 | ;assert.quiet_eval = 0 1649 | 1650 | [mbstring] 1651 | ; language for internal character representation. 1652 | ; This affects mb_send_mail() and mbstrig.detect_order. 1653 | ; http://php.net/mbstring.language 1654 | ;mbstring.language = Japanese 1655 | 1656 | ; Use of this INI entory is deprecated, use global internal_encoding instead. 1657 | ; internal/script encoding. 1658 | ; Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*) 1659 | ; If empty, default_charset or internal_encoding is used in order. 1660 | ; http://php.net/mbstring.internal-encoding 1661 | ;mbstring.internal_encoding = 1662 | 1663 | ; Use of this INI entory is deprecated, use global input_encoding instead. 1664 | ; http input encoding. 1665 | ; If empty, input_encoding is used. 1666 | ; mbstring.encoding_traslation = On is needed to use this setting. 1667 | ; http://php.net/mbstring.http-input 1668 | ;mbstring.http_input = 1669 | 1670 | ; Use of this INI entory is deprecated, use global output_encoding instead. 1671 | ; http output encoding. 1672 | ; mb_output_handler must be registered as output buffer to function. 1673 | ; If empty, output_encoding is used. 1674 | ; http://php.net/mbstring.http-output 1675 | ;mbstring.http_output = 1676 | 1677 | ; enable automatic encoding translation according to 1678 | ; mbstring.internal_encoding setting. Input chars are 1679 | ; converted to internal encoding by setting this to On. 1680 | ; Note: Do _not_ use automatic encoding translation for 1681 | ; portable libs/applications. 1682 | ; http://php.net/mbstring.encoding-translation 1683 | ;mbstring.encoding_translation = Off 1684 | 1685 | ; automatic encoding detection order. 1686 | ; "auto" detect order is changed accoding to mbstring.language 1687 | ; http://php.net/mbstring.detect-order 1688 | ;mbstring.detect_order = auto 1689 | 1690 | ; substitute_character used when character cannot be converted 1691 | ; one from another 1692 | ; http://php.net/mbstring.substitute-character 1693 | ;mbstring.substitute_character = none 1694 | 1695 | ; overload(replace) single byte functions by mbstring functions. 1696 | ; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), 1697 | ; etc. Possible values are 0,1,2,4 or combination of them. 1698 | ; For example, 7 for overload everything. 1699 | ; 0: No overload 1700 | ; 1: Overload mail() function 1701 | ; 2: Overload str*() functions 1702 | ; 4: Overload ereg*() functions 1703 | ; http://php.net/mbstring.func-overload 1704 | ;mbstring.func_overload = 0 1705 | 1706 | ; enable strict encoding detection. 1707 | ; Default: Off 1708 | ;mbstring.strict_detection = On 1709 | 1710 | ; This directive specifies the regex pattern of content types for which mb_output_handler() 1711 | ; is activated. 1712 | ; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml) 1713 | ;mbstring.http_output_conv_mimetype= 1714 | 1715 | [gd] 1716 | ; Tell the jpeg decode to ignore warnings and try to create 1717 | ; a gd image. The warning will then be displayed as notices 1718 | ; disabled by default 1719 | ; http://php.net/gd.jpeg-ignore-warning 1720 | ;gd.jpeg_ignore_warning = 0 1721 | 1722 | [exif] 1723 | ; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS. 1724 | ; With mbstring support this will automatically be converted into the encoding 1725 | ; given by corresponding encode setting. When empty mbstring.internal_encoding 1726 | ; is used. For the decode settings you can distinguish between motorola and 1727 | ; intel byte order. A decode setting cannot be empty. 1728 | ; http://php.net/exif.encode-unicode 1729 | ;exif.encode_unicode = ISO-8859-15 1730 | 1731 | ; http://php.net/exif.decode-unicode-motorola 1732 | ;exif.decode_unicode_motorola = UCS-2BE 1733 | 1734 | ; http://php.net/exif.decode-unicode-intel 1735 | ;exif.decode_unicode_intel = UCS-2LE 1736 | 1737 | ; http://php.net/exif.encode-jis 1738 | ;exif.encode_jis = 1739 | 1740 | ; http://php.net/exif.decode-jis-motorola 1741 | ;exif.decode_jis_motorola = JIS 1742 | 1743 | ; http://php.net/exif.decode-jis-intel 1744 | ;exif.decode_jis_intel = JIS 1745 | 1746 | [Tidy] 1747 | ; The path to a default tidy configuration file to use when using tidy 1748 | ; http://php.net/tidy.default-config 1749 | ;tidy.default_config = /usr/local/lib/php/default.tcfg 1750 | 1751 | ; Should tidy clean and repair output automatically? 1752 | ; WARNING: Do not use this option if you are generating non-html content 1753 | ; such as dynamic images 1754 | ; http://php.net/tidy.clean-output 1755 | tidy.clean_output = Off 1756 | 1757 | [soap] 1758 | ; Enables or disables WSDL caching feature. 1759 | ; http://php.net/soap.wsdl-cache-enabled 1760 | soap.wsdl_cache_enabled=1 1761 | 1762 | ; Sets the directory name where SOAP extension will put cache files. 1763 | ; http://php.net/soap.wsdl-cache-dir 1764 | 1765 | ; RPM note : cache directory must be owned by process owner 1766 | ; for mod_php, see /etc/httpd/conf.d/php.conf 1767 | ; for php-fpm, see /etc/php-fpm.d/*conf 1768 | soap.wsdl_cache_dir="/tmp" 1769 | 1770 | ; (time to live) Sets the number of second while cached file will be used 1771 | ; instead of original one. 1772 | ; http://php.net/soap.wsdl-cache-ttl 1773 | soap.wsdl_cache_ttl=86400 1774 | 1775 | ; Sets the size of the cache limit. (Max. number of WSDL files to cache) 1776 | soap.wsdl_cache_limit = 5 1777 | 1778 | [sysvshm] 1779 | ; A default size of the shared memory segment 1780 | ;sysvshm.init_mem = 10000 1781 | 1782 | [ldap] 1783 | ; Sets the maximum number of open links or -1 for unlimited. 1784 | ldap.max_links = -1 1785 | 1786 | [mcrypt] 1787 | ; For more information about mcrypt settings see http://php.net/mcrypt-module-open 1788 | 1789 | ; Directory where to load mcrypt algorithms 1790 | ; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt) 1791 | ;mcrypt.algorithms_dir= 1792 | 1793 | ; Directory where to load mcrypt modes 1794 | ; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt) 1795 | ;mcrypt.modes_dir= 1796 | 1797 | [dba] 1798 | ;dba.default_handler= 1799 | 1800 | [curl] 1801 | ; A default value for the CURLOPT_CAINFO option. This is required to be an 1802 | ; absolute path. 1803 | ;curl.cainfo = 1804 | 1805 | ; Local Variables: 1806 | ; tab-width: 4 1807 | ; End: -------------------------------------------------------------------------------- /vagrant/provision/php.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo "Istalling php" 4 | 5 | rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm 6 | yum install -y php56w-common php56w-opcache php56w-mbstring php56w-devel php56w-xml php56w-xmlrpc php56w-pear php56w-pecl-xdebug openssl-devel gcc 7 | 8 | no | pecl install mongo 9 | 10 | yes | cp -rf /vagrant/vagrant/provision/files/php.ini /etc/php.ini 11 | --------------------------------------------------------------------------------