At production level session_regenerate_id warning is annoying. So I suppress ZF2 (2.4.13) session manager session_regenerate_id warning by changing Zend/Session/SessionManager.php file’s regenerateId method by putting “@” in front of session_regenerate_id function.
Changing ZF2 core 2.4.13 \Zend\Stdlib\Hydrator\AbstractHydrator::hasStrategy
class: Zend\Stdlib\Hydrator\AbstractHydrator
function: hasStrategy
php version: 7.4
public function hasStrategy($name)
new change / new code
{
if(is_array($this->strategies))
return array_key_exists($name, $this->strategies)
|| array_key_exists(‘*’, $this->strategies);
if(is_object($this->strategies)) return property_exists($this->strategies, $name);
return false;
}
Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in /media/shkr-home-wifi/works/workspace/vendor/ZF2/library/ Zend\Stdlib\Hydrator\AbstractHydrator on line 87
reason of change
public function hasStrategy($name)
previous code
{
return array_key_exists($name, $this->strategies)
|| array_key_exists(‘*’, $this->strategies);
}
Changing ZF2 Core 2.4.13 /Zend/I18n/Translator/Loader/Gettext::load
class: Zend\I18n/Translator/Loader/Gettext
function: load
php version: 7.4
Last portion change …….
if ($textDomain->offsetExists(”)) {
$rawHeaders = explode(“\n”, trim($textDomain->offsetGet(”)));
foreach ($rawHeaders as $rawHeader) {
list($header, $content) = explode(‘:’, $rawHeader, 2);
if (trim(strtolower($header)) === ‘plural-forms’) {
$textDomain->setPluralRule(PluralRule::fromString($content));
}
}
$textDomain->offsetUnset(”);
}
………….. end of change ………………..
Reason to change: Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in …/Zend/I18n/Translator/Loader/Gettext.php on line 142
///////// previous code ///////////////////
if (array_key_exists(”, $textDomain)) {
$rawHeaders = explode(“\n”, trim($textDomain[”]));
foreach ($rawHeaders as $rawHeader) {
list($header, $content) = explode(‘:’, $rawHeader, 2);
if (trim(strtolower($header)) === ‘plural-forms’) {
$textDomain->setPluralRule(PluralRule::fromString($content));
}
}
unset($textDomain[”]);
}
Copy large amount of file to remote server using nohup tar and ssh
This command will copy large amount of file to remote server by compressing and decompressing on the fly. It saves time and bandwidth. It will execute in background, so you can detach current login session.
nohup sh -c “tar -c /any/directory/at/source/server/ | gzip -2 | ssh server-alias ‘cat | tar xz -C /target/directory/of/target/server/'” > /dev/null 2>&1 &
here nohup output sent to /dev/null that means i don’t want any nohup output. you can adjust its behavior.
I use the command for millions of file that occupied more than 500 GB.
add new hard disk into ubuntu more than 2TB size
lsblk
will list available device
parted /dev/sdd
considered device “sdd” from lsblk output
(parted) mklabel gpt
(parted) mkpart primary ext3 0 100%
(parted) print
(parted) quit
mkfs.ext3 /dev/sdd1
this command will format this hard disk into ext3 file system as we instruct by parted command
mkdir /home/data
mounting point directory creating
mount -t ext3 /dev/sdd1 /home/data
mounting formatted hard disk into target directory
blkid
try to find ID of new hard disk to write into fstab so that after restart our hard disk will mount automatically
sample output of blkid
/dev/sdd1: UUID="20e4b16b-4d4c-4053-b6f4-a2c103f2db2f" TYPE="ext3" PARTLABEL="primary" PARTUUID="33658d68-726f-4398-992f-2aaafebe17ff"
vi /etc/fstab
give an entry for our new hard disk at the end of this file
example entry
UUID=20e4b16b-4d4c-4053-b6f4-a2c103f2db2f /home/data ext3 nofail 0 0
recursive change group and file mode in linux and detach active login session
change group
nohup sh -c “find /any/path/that/need/to/change/* -group mygroup -exec chgrp www-data {} \;” > /dev/null 2>&1 &
traditional way
nohup sh -c “chgrp -R www-data /any/path/that/need/to/change” > /dev/null 2>&1 &
change mode
nohup sh -c “find /any/path/that/need/to/change/* -perm u=rw,g=r,o=r -execdir chmod g+w {} \;” > /dev/null 2>&1 &
traditional way
nohup sh -c “chmod -R g+w /any/path/that/need/to/change” > /dev/null 2>&1 &
Changing ZF2 Core 2.4.13 Zend\View\Helper\HeadLink::createDataStylesheet
class: Zend\View\Helper\HeadLink
function: createDataStylesheet
php version: 7.3
public function createDataStylesheet(array $args)
new/modified/final/current code
{
$rel = ‘stylesheet’;
$type = ‘text/css’;
$media = ‘screen’;
$conditionalStylesheet = false;
$href = array_shift($args);
if ($this->isDuplicateStylesheet($href)) { return false; } if (0 < count($args)) { $media = array_shift($args); if (is_array($media)) { $media = implode(',', $media); } else { $media = (string) $media; } } if (0 < count($args)) { $conditionalStylesheet = array_shift($args); if (!empty($conditionalStylesheet) && is_string($conditionalStylesheet)) { $conditionalStylesheet = (string) $conditionalStylesheet; } else { $conditionalStylesheet = null; } } $attributes = compact('rel', 'type', 'href', 'media', 'conditionalStylesheet'); if (0 < count($args) && is_array($args[0])) { $extras = array_shift($args); $attributes['extras'] = (array) $extras; } return $this->createData($attributes); }
public function createDataStylesheet(array $args)
previous/original/old code
{
$rel = ‘stylesheet’;
$type = ‘text/css’;
$media = ‘screen’;
$conditionalStylesheet = false;
$href = array_shift($args);
if ($this->isDuplicateStylesheet($href)) { return false; } if (0 < count($args)) { $media = array_shift($args); if (is_array($media)) { $media = implode(',', $media); } else { $media = (string) $media; } } if (0 < count($args)) { $conditionalStylesheet = array_shift($args); if (!empty($conditionalStylesheet) && is_string($conditionalStylesheet)) { $conditionalStylesheet = (string) $conditionalStylesheet; } else { $conditionalStylesheet = null; } } if (0 < count($args) && is_array($args[0])) { $extras = array_shift($args); $extras = (array) $extras; } $attributes = compact('rel', 'type', 'href', 'media', 'conditionalStylesheet', 'extras'); return $this->createData($attributes); }
Install php 7.2 ssh2 in ubuntu 16x
recently i need to install ssh2 connection through my php code to connect remote server by sftp for file transfer. i’m using php 7.2 and face a “sigment fault” issue for normal installation. i solved this issue by install required demon. hope it may help someone who face same issue.
first you need to install/upgrade some basic program
apt-get install gcc make autoconf libc-dev pkg-config
then install base library
apt-get install libssh2-1-dev
now install required php modules
apt-get install php7.2-dev php-pear
now install ssh by pecl (the most important part of installation)
— pecl channel-update pecl.php.net
ignore commented line OR use if you understand by yourself
pear config-show
— pear config-set php_ini /etc/php/7.2/apache2/php.ini
— pear config-set temp_dir /etc/php/temp/pear
pecl install ssh2-1.1.2
now you need to enable ssh2 extension into your php cli installation
echo “extension=ssh2.so” > /etc/php/7.2/mods-available/ssh2.ini
please check you php installation/configuration path. set priority on your own. i set here 30 without proper understanding 😀
ln -s /etc/php/7.2/mods-available/ssh2.ini /etc/php/7.2/cli/conf.d/30-ssh2.ini
now another important part is your PHP code. when we use ssh2 in fopen wraper, in other version of ssh2 connection we need to open a connection and we can use resource id. but with the above change you must use user, password, port i.e. full access information every time we need to connect to server. here is my sample code –
$fh = @fopen(‘ssh2.sftp://’ . $this->user.’:’.$this->pass.’@’.$this->ip.’:’.(intval($this->port)>0?intval($this->port):22) . $pRemoteLocation, $pMode);
all other code like directory creation or any other command execution may be same as before.
changing zf2 core 2.4.13 Zend/Stdlib/ArrayObject.php
class : Zend\Stdlib\ArrayObject
function: unserialize($data)
php version: 7.3
previous (original) code
/**
* Unserialize an ArrayObject
*
* @param string $data
* @return void
*/
public function unserialize($data)
{
$ar = unserialize($data);
$this->protectedProperties = array_keys(get_object_vars($this));$this->setFlags($ar[‘flag’]);
$this->exchangeArray($ar[‘storage’]);
$this->setIteratorClass($ar[‘iteratorClass’]);foreach ($ar as $k => $v) {
switch ($k) {
case ‘flag’:
$this->setFlags($v);
break;
case ‘storage’:
$this->exchangeArray($v);
break;
case ‘iteratorClass’:
$this->setIteratorClass($v);
break;
case ‘protectedProperties’:
continue;
default:
$this->__set($k, $v);
}
}
}
new code
public function unserialize($data)
{
$ar = unserialize($data);
$this->protectedProperties = array_keys(get_object_vars($this));$this->setFlags($ar[‘flag’]);
$this->exchangeArray($ar[‘storage’]);
$this->setIteratorClass($ar[‘iteratorClass’]);$need2continue=false;
foreach ($ar as $k => $v) {
$need2continue=false;
switch ($k) {
case ‘flag’:
$this->setFlags($v);
break;
case ‘storage’:
$this->exchangeArray($v);
break;
case ‘iteratorClass’:
$this->setIteratorClass($v);
break;
case ‘protectedProperties’:
/**
* in php 7.3 it shows
* Warning: “continue” targeting switch is equivalent to “break”. Did you mean to use “continue 2”? in /…location of zf2 ………../Zend/Stdlib/ArrayObject.php on line 426
*/
#continue;
$need2continue=true;
break;
default:
$this->__set($k, $v);
}
if(true==$need2continue) continue;
}
}
kill mysql process which is ideal for N seconds
step 1:
login mysql through putty
step 2:
execute – SELECT GROUP_CONCAT(‘KILL ‘,id,’; ‘ SEPARATOR ‘ ‘) FROM information_schema.processlist WHERE time > 500 AND user<>’system user’;
step 3:
you will get a string as output. copy that string and paste into mysql command prompt and press enter…
nJoy