用遠振主機又踩雷啦,遠振將escapeshellarg這個函式disabled
所以只要有用到
SebastianBergmann\Environment\Runtime
Symfony\Component\Console\Input\Input
Symfony\Component\HttpFoundation\File\MimeType\FileBinaryMimeTypeGuesser
Symfony\Component\Process\ProcessUtils
Tracy\Debugger
都會提示 escapeshellarg() has been disabled for security reasons
不過還好php5.3之後就支援namespace,可以讓我們輕鬆略過這個問題
(如果使用的套件不支援namespace那就只好認命的去修改程式囉)
只要require下面的檔案就可以解決這些問題了
```php
namespace Yuan\Jhen
{
if (function_exists('escapeshellarg') === true) {
function escapeshellarg($input)
{
return \escapeshellarg($input);
}
} else {
function escapeshellarg($input)
{
$input = str_replace('\'', '\\\'', $input);
return '\''.$input.'\'';
}
}
}
namespace SebastianBergmann\Environment
{
function escapeshellarg($input)
{
return \Yuan\Jhen\escapeshellarg($input);
}
}
namespace Symfony\Component\Console\Input
{
function escapeshellarg($input)
{
return \Yuan\Jhen\escapeshellarg($input);
}
}
namespace Symfony\Component\HttpFoundation\File\MimeType
{
function escapeshellarg($input)
{
return \Yuan\Jhen\escapeshellarg($input);
}
}
namespace Symfony\Component\Process
{
function escapeshellarg($input)
{
return \Yuan\Jhen\escapeshellarg($input);
}
}
namespace Tracy
{
function escapeshellarg($input)
{
return \Yuan\Jhen\escapeshellarg($input);
}
}
```
2015年12月28日 星期一
2015年12月22日 星期二
利用Git來升級Laravel
照著影片操作,就會出現conflicts,處理完conflicts之後,再執行
```bash
composer install
```
這樣大致上就升級完畢了,而且如果升級出問題還可以利用git本身的功能來進行還原...
2015年12月20日 星期日
php 偵測語系
```php
function getDefaultLanguage()
{
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
return parseDefaultLanguage($_SERVER['HTTP_ACCEPT_LANGUAGE']);
} else {
return parseDefaultLanguage(null);
}
}
function parseDefaultLanguage($http_accept, $deflang = 'zh-TW')
{
if (isset($http_accept) && strlen($http_accept) > 1) {
# Split possible languages into array
$x = explode(',', $http_accept);
foreach ($x as $val) {
#check for q-value and create associative array. No q-value means 1 by rule
if (preg_match("/(.*);q=([0-1]{0,1}.\d{0,4})/i", $val, $matches)) {
$lang[$matches[1]] = (float) $matches[2];
} else {
$lang[$val] = 1.0;
}
}
#return default language (highest q-value)
$qval = 0.0;
foreach ($lang as $key => $value) {
if ($value > $qval) {
$qval = (float) $value;
$deflang = $key;
}
}
}
return strtolower($deflang);
}
echo getDefaultLanguage();
```
資料庫備份工具
```php
class DatabaseClone
{
public $link;
public function __construct($host, $username, $password)
{
$this->link = mysqli_connect($host, $username, $password);
mysqli_query($this->link, 'SET NAMES utf8');
mysqli_query($this->link, 'SET AUTOCOMMIT = 0');
mysqli_query($this->link, 'SET UNIQUE_CHECKS = 0');
mysqli_query($this->link, 'SET FOREIGN_KEY_CHECKS = 0');
}
public function fetch($query)
{
$results = [];
$query = mysqli_query($this->link, $query);
while ($row = mysqli_fetch_assoc($query)) {
$results[] = $row;
}
return $results;
}
public function copy($copyTo)
{
set_time_limit(-1);
ini_set('memory_limit', -1);
$query = mysqli_query($this->link, $sql = 'show databases');
while ($database = mysqli_fetch_assoc($query)) {
$database = $database['Database'];
if (in_array($database, ['mysql', 'information_schema', 'performance_schema'], true) === true) {
continue;
}
$createDatabase = mysqli_fetch_assoc(mysqli_query($this->link, 'SHOW CREATE DATABASE `'.$database.'`'));
mysqli_query($copyTo->link, $sql = 'DROP DATABASE IF EXISTS `'.$database.'`') or var_dump($sql);
mysqli_query($copyTo->link, $sql = $createDatabase['Create Database']) or var_dump($sql);
mysqli_select_db($this->link, $database);
mysqli_select_db($copyTo->link, $database);
$query2 = mysqli_query($this->link, $sql = 'show tables');
while ($table = mysqli_fetch_assoc($query2)) {
$table = current($table);
$createTable = mysqli_fetch_assoc(mysqli_query($this->link, 'SHOW CREATE TABLE `'.$table.'`'));
mysqli_query($copyTo->link, $sql = $createTable['Create Table']) or var_dump($sql);
$counts = current(mysqli_fetch_assoc(mysqli_query($this->link, 'SELECT COUNT(*) as counts FROM `'.$table.'`')));
$range = range(0, $counts - 1);
$offset = 0;
$limit = 200;
$chunks = array_chunk($range, $limit);
foreach ($chunks as $chunk) {
$query3 = mysqli_query($this->link, $sql = 'SELECT * FROM `'.$table.'` LIMIT '.$limit.' OFFSET '.$offset) or var_dump($database, $sql);
while ($row = mysqli_fetch_assoc($query3)) {
$keys = [];
$values = [];
foreach ($row as $key => $value) {
$keys[] = '`'.$key.'`';
$values[] = "'".addslashes($value)."'";
}
mysqli_query($copyTo->link, $sql = 'INSERT INTO `'.$table.'` ('.implode(',', $keys).') VALUES ('.implode(',', $values).')') or var_dump($database, $sql);
}
$offset += count($chunk);
}
}
}
}
}
$database = new DatabaseClone('localhost:3306', 'root', '');
$database->copy(new DatabaseClone('localhost:3308', 'root', ''));
```
訂閱:
文章 (Atom)