You need to edit the following file using notepad and run as admin
C:\Windows\System32\drivers\etc\hosts
If you edit subsystem linux's /etc/hosts, it will not affect browser such as Google Chrome
You need to edit the following file using notepad and run as admin
C:\Windows\System32\drivers\etc\hosts
If you edit subsystem linux's /etc/hosts, it will not affect browser such as Google Chrome
Assume you already can access your person github repositories using public key id_rsa.pub
# file name: ~/.ssh/id_rsa2
ssh-keygen
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
AddKeysToAgent yes
ServerAliveInterval 60
ServerAliveCountMax 30
# Work GitHub account
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa2
AddKeysToAgent yes
ServerAliveInterval 60
ServerAliveCountMax 30
git clone git@github-work:mycompany/jackt.git
Step 1: add rule to the security group attached to the instance
Step 2: update privilidge of Mysql database
#works for mysql 5.7.8 and up. To change a user's ip
RENAME USER 'teau'@'51.27.292.63' TO 'teau'@'125.256.111.%';
# for new user, need to grant permission
If do not do the step one, most likely will see a connection timeout
If do not do the second step, will see something like
[MySQL][ODBC 8.0(w) Driver]Host '*.*.***.**' is not allowed to connect to this MySQL server
Unable to connect to the MySQL server "***.***.**.**". Check that the server is running and that you have
access privileges to the requested database.
select version();
select user, host from mysql.user;
SHOW GRANTS FOR 'leo'@'52.30.111.16';
https://paysomething.sandbox.mysite.io/v1/tasks/process
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'cookiename: blue',
'X-Apple-Store-Front: 143444,12'
]);
Use ModHeader extension
Click Headers tab to add custom header
docker-compose run --rm -w /var/src/Propel api ./../vendor/bin/propel migrate --fake
it doesn't actually run the migrations, but it marks them as having been completed. It will add versions in propel_migration table.
Mainly there are two use cases.
Here is a sample policy. Only ips in the list will allow to call that API
{
"Version": "2012-10-17",
"Statement": [
{
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"223.333.923.28/32",
"162.222.229.139/32"
]
}
},
"Action": [
"execute-api:Invoke"
],
"Resource": [
"arn:aws:execute-api:us-west-1:112334444444:1wertttt/*/POST/v1/bill",
"arn:aws:execute-api:us-west-1:112334444444:1wertttt/*/GET/vi/bill/*"
],
"Effect": "Allow"
}
]
}
Here is a command to run php 8 in a host machine which only has php 7 installed
docker run --rm --volume `pwd`:/var/src/ -w /var/src php:8.0.26-cli-alpine3.16 php ./bin/swagger_gen.php ./rest/swagger/v1/
Breakdown
--rm Automatically remove the container and its associated anonymous volumes when it exits
--volume `pwd`:/var/src/ Bind mount a volume (docker run --volume host-path:container-path
-w Working directory inside the container
<?php
error_reporting(E_ALL);
class PropertyTest
{
/** Location for overloaded data. */
private $data = array();
public function __set($name, $value)
{
$this->data[$name] = $value;
}
public function __get($name)
{
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
} else {
throw new Exception($name . " not found");
}
}
}
$obj = new PropertyTest();
$obj->goods = ["a", "b"];
//the line below will throw notice
//Indirect modification of overloaded property PropertyTest::$goods has no effect
$obj->goods[] = "c";
//still got ["a", "b"]
var_dump($obj->goods);
To fix the error, replace the last two lines of codes with the below.
$obj->goods= array_merge($obj->goods, ['c']);
//got ["a", "b", "c"]
var_dump($obj->goods);
Here is another example
$obj = new PropertyTest();
$obj->test=["a"=>2];
var_dump($obj->test);
//will throw the notice and will not change value
$obj->test['a'] =3;
//the result is the same as what we get from the last dump
var_dump($obj->test);
To make it work as expected
$obj = new PropertyTest();
$obj->test=["a"=>2];
var_dump($obj->test);
$ans = $obj->test;
$ans['a'] = 3;
$obj->test = $ans;
var_dump($obj->test)
Create tag and release the tag.
Assume release version 2.0.1
git tag -a v2.0.1 -m "create tag message"
git push origin V2.0.1
Use error_reporting() with no parameters. It will return the current error level.
//get current error level
if(!defined('STDOUT')) define('STDOUT', fopen('php://stdout', 'wb'));
fwrite(STDOUT, "\nerror level:" . var_export(error_reporting(), true) . "\n");
error level:30711 (the number 30711 is the magic number for the E_ALL error code.)
//show all errors except e_notice and e_strict. It will show deprecated error
//this can be used in sandbox or local
error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);
//the following will not show depecated warning. This fits to production
error_reporting(E_ERROR | E_WARNING | E_PARSE);
#choose MySql and do not run migration when ask
laravel new example-app
# change .env with mysql user name and password
# run migration
php artisan migrate
To create new table and new model. Here we use task model as example.
# create a migration and a model class. migration script is in
# this folder database/migrations
# model class is in this folder app/Models
php artisan make:model Task -m
The next step is to edit the migration script to add new columns
public function up(): void
{
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string("title");
$table->text("description");
$table->text("long_description")->nullable();
$table->boolean("completed")->default(false);
});
}
The last step is run migration to create table tasks.
php artisan migrate
(optional) seed the table
To make seed work, need to HasFactory trait in model class
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Payment extends Model
{
use HasFactory;
//
}
# create a factory
php artisan make:factory TaskFactory --model=Task
# seed database
php artisan db:seed
# after run, go to http://localhost:8000
php artisan serve
php artisan route:list
php artisan tinker
When I bought a new window machine, I would wipe window out and install linux. For window 11 machine I just bought, it has WSL. I want to try it.
Install WSL
wsl --install
To use Ubuntu
Install development tools
To install tools such as Docker, vscode and npm, please check docs and DO NOT install directly in ubuntu using apt install.
Install git
sudo apt update
sudo apt install git-all
Install node and npm
sudo apt-get install curl
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
#restart terminal. Then
nvm install --lts
#see nodes installed
nvm ls
Access Window files from Linux
cd /mnt/c/Users/<your_Windows_username>
#for example
cd /mnt/c/Users/oldwe/Downloads/
cp prj-00-initial-starting-setup.zip ~/.
Install MySQL
sudo apt update
sudo apt install mysql-server
Start and access MySQL
# start MySQL server
systemctl status mysql
# open MySQL client as log in as root
sudo mysql
# create a new user
CREATE USER 'leo'@'localhost' IDENTIFIED BY 'test1234';
# normally should give privileges by db name.
GRANT ALL PRIVILEGES ON *.* TO 'leo'@'localhost';
In Summary, after install MySQL, to work with it, we need
#start server
systemctl status mysql
#login as root
sudo mysql
#login as a user
mysql -u leo --password=test1234
issue 1: Can not access docker daemon in Ubuntu after window update
Solution, need to enable docker desktop with wsl in docker desktop setting.
PHP installed in your local machine is PHP 7. You want to test if your codes work in PHP 8.3. You can use Docker container to do the testing.
#Dockerfile
FROM php:8.3.11RC2-zts-alpine3.20
RUN apk update
RUN apk add php83-dom php83-tokenizer php83-fileinfo php83-simplexml \
apache2 php83 php83-apache2 php83-ctype php83-openssl \
php83-curl php83-pecl-apcu php83-opcache php83-bcmath php83-xml \
php83-intl php83-iconv php83-mbstring php83-session php83-common \
bash util-linux-misc
RUN apk upgrade
COPY ./ /var/src
<?
//test.php
echo "Hello world", "\n";
Step one: put Dockerfile into the same directory where test.php (your php codes) is in.
Step two: Build image, run container and do testing.
#build docker image
docker build --no-cache -t my-test .
#run docker image and go inside container
docker run -it my-test bash
# go to working directory and run the script
cd /var/src
php test.php
If PayPal merchant id is not matched to client id/secrete, may get the following error when do refund.
'issue' => 'PERMISSION_DENIED',
'field' => 'capture_id',
'value' => '7VJ16605X3012345',
'description' => 'You do not have permission to access or perform operations on this resource.'
Docker compose file
version: '3'
services:
mysql:
container_name: docker_mysql_1
ports:
- 3306:3306/tcp
privileged: true
restart: on-failure
environment:
MYSQL_ROOT_PASSWORD: revenuewire
command:
- --innodb_file_per_table=0
- --innodb_checksum_algorithm=INNODB
- --binlog_checksum=NONE
- --sql_mode=NO_ENGINE_SUBSTITUTION
- --slow-query-log=1
- --slow-query-log-file=/var/log/mysql/my-slow.log
- --long_query_time=1
- --log-queries-not-using-indexes
image: mysql:8.0
volumes:
- mysql:/var/lib/mysql
network_mode: bridge
volumes:
mysql:
command to run
docker-compose up -d
Error
2024-07-31T12:03:25.087089Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.39) initializing of server in progress as process 80
2024-07-31T12:03:25.089461Z 0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.
2024-07-31T12:03:25.089468Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
2024-07-31T12:03:25.089537Z 0 [ERROR] [MY-010119] [Server] Aborting
2024-07-31T12:03:25.089947Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.39) MySQL Community Server - GPL.
Try to access mysql volume using Docker Desktop Dashboard
Solved
Look like it is mac VM problem. After do the following, it works. Just do not know why