编程(PHP)
Jan
13
--begin
php 获取URL 各部分参数 之URL处理几个关键的函数parse_url、parse_str与http_build_query
1、parse_url()
该函数可以解析 URL,返回其组成部分。它的用法如下:
array parse_url(string $url)
此函数返回一个关联数组,包含现有 URL 的各种组成部分。如果缺少了其中的某一个,则不会为这个组成部分创建数组项。组成部分为:
scheme - 如 http
host - 如 localhost
port - 如 80
user
pass
path - 如 /parse_str.php
query - 在问号 ? 之后 如 id=1&category=php&title=php-install
fragment - 在散列符号 # 之后
此函数并不意味着给定的 URL 是合法的,它只是将上方列表中的各部分分开。parse_url() 可接受不完整的 URL,并尽量将其解析正确。此函数对相对路径的 URL 不起作用。
<?php
$url = "http://52php.cnblogs.com/welcome/";
$parts = parse_url($url);
print_r($parts);
?>
程序运行结果如下:
Array
(
[scheme] => http
[host] => 52php.cnblogs.com
[path] => /welcome/
)
该函数可以解析 URL,返回其组成部分。它的用法如下:
array parse_url(string $url)
此函数返回一个关联数组,包含现有 URL 的各种组成部分。如果缺少了其中的某一个,则不会为这个组成部分创建数组项。组成部分为:
scheme - 如 http
host - 如 localhost
port - 如 80
user
pass
path - 如 /parse_str.php
query - 在问号 ? 之后 如 id=1&category=php&title=php-install
fragment - 在散列符号 # 之后
此函数并不意味着给定的 URL 是合法的,它只是将上方列表中的各部分分开。parse_url() 可接受不完整的 URL,并尽量将其解析正确。此函数对相对路径的 URL 不起作用。
<?php
$url = "http://52php.cnblogs.com/welcome/";
$parts = parse_url($url);
print_r($parts);
?>
程序运行结果如下:
Array
(
[scheme] => http
[host] => 52php.cnblogs.com
[path] => /welcome/
)
<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));
echo '<br />';
echo parse_url($url, PHP_URL_PATH);
?>
程序输出:
Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)
可以看到,可以很容易分解出一个URL的各个部,那如果要拿指定的部分出来的话也很容易,如:
echo parse_url($url, PHP_URL_PATH);
就是在第二个参数中,设定如下的参数:PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT, PHP_URL_USER, PHP_URL_PASS, PHP_URL_PATH, PHP_URL_QUERY or PHP_URL_FRAGMENT。
2、parse_str()
parse_str用来解析URL中的查询字符串,即可以通过$_SERVER['QUERY_STRING']取得的字符串值,假如我们请求的URL是 http://localhost/parse_str.php?id=1&category=php&title=php-install,那么$_SERVER['QUERY_STRING']返回的值为id=1&category=php&title=php-install,而这种形式的字符串恰巧可以使用parse_str解析成关联数组的形式。
用法如下:
void parse_str(string $str [, array &$arr ])
该函数接收两个参数,$str为需要解析的字符串,而可选参数$arr为解析之后生成的数组值所存放的变量名,如果忽略可选参数,那么可以直接调用类似$id、$category、$title的变量。下面的脚本模拟了GET请求。
<?php
<a xhref="http://localhost/parse_str.php?id=1&category=php&title=php-install">Click Here</a>
$query_str = $_SERVER['QUERY_STRING'];
parse_str($query_str); /* 这种方式可以直接使用变量$id, $category, $title */
parse_str($query_str, $query_arr);
?>
<pre><?php print_r($query_arr); ?></pre>
<p><?php echo $id; ?></p>
<p><?php echo $category; ?></p>
<p><?php echo $title; ?></p>
?>
/* 运行结果 */
Array
(
[id] => 1
[category] => php
[title] => php-install
)
1
php
php-install
$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));
echo '<br />';
echo parse_url($url, PHP_URL_PATH);
?>
程序输出:
Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)
可以看到,可以很容易分解出一个URL的各个部,那如果要拿指定的部分出来的话也很容易,如:
echo parse_url($url, PHP_URL_PATH);
就是在第二个参数中,设定如下的参数:PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT, PHP_URL_USER, PHP_URL_PASS, PHP_URL_PATH, PHP_URL_QUERY or PHP_URL_FRAGMENT。
2、parse_str()
parse_str用来解析URL中的查询字符串,即可以通过$_SERVER['QUERY_STRING']取得的字符串值,假如我们请求的URL是 http://localhost/parse_str.php?id=1&category=php&title=php-install,那么$_SERVER['QUERY_STRING']返回的值为id=1&category=php&title=php-install,而这种形式的字符串恰巧可以使用parse_str解析成关联数组的形式。
用法如下:
void parse_str(string $str [, array &$arr ])
该函数接收两个参数,$str为需要解析的字符串,而可选参数$arr为解析之后生成的数组值所存放的变量名,如果忽略可选参数,那么可以直接调用类似$id、$category、$title的变量。下面的脚本模拟了GET请求。
<?php
<a xhref="http://localhost/parse_str.php?id=1&category=php&title=php-install">Click Here</a>
$query_str = $_SERVER['QUERY_STRING'];
parse_str($query_str); /* 这种方式可以直接使用变量$id, $category, $title */
parse_str($query_str, $query_arr);
?>
<pre><?php print_r($query_arr); ?></pre>
<p><?php echo $id; ?></p>
<p><?php echo $category; ?></p>
<p><?php echo $title; ?></p>
?>
/* 运行结果 */
Array
(
[id] => 1
[category] => php
[title] => php-install
)
1
php
php-install
http_build_query 就是将一个数组转换成url ?后面的参数字符串,会自动进行urlencode处理
3、
3、
string http_build_query ( array formdata [, string numeric_prefix])
后面的给数组中没有指定键或者键为数字的加下标
官方手册:http://php.net/manual/zh/function.http-build-query.php
后面的给数组中没有指定键或者键为数字的加下标
官方手册:http://php.net/manual/zh/function.http-build-query.php
how-php-get-url-parm-function
php 获取URL 各部分参数 之URL处理几个关键的函数parse_url、parse_str与http_build_query
--end
Jan
13
---begin
php 获取数组第一个元素 以及最后一个元素以及最后一个元素的键名
1.最后一个元素以及最后一个元素的键名
先用end()将内部指针指向数组中的最后一个元素,再用key()函数返回数组内部指针当前指向元素的键名。
$arr = array(1,2,34,4,5,6,7,3);
end($arr);
echo key($arr);
1.最后一个元素以及最后一个元素的键名
先用end()将内部指针指向数组中的最后一个元素,再用key()函数返回数组内部指针当前指向元素的键名。
$arr = array(1,2,34,4,5,6,7,3);
end($arr);
echo key($arr);
2.获取数组第一个元素
$tmp = array('a','b','c','d');
echo reset($tmp);
输出
a
每个数组中都有一个内部的指针指向它的"当前"元素,初始指向插入到数组中的第一个元素。
end() - 将内部指针指向数组中的最后一个元素,并输出
next() - 将内部指针指向数组中的下一个元素,并输出
prev() - 将内部指针指向数组中的上一个元素,并输出
reset() - 将内部指针指向数组中的第一个元素,并输出
each() - 返回当前元素的键名和键值,并将内部指针向前移动
current() 函数返回数组中的当前元素的值。
<?php
$tmp = array('a','b','c','d');
echo current($tmp)."\n";
echo end($tmp)."\n";
echo current($tmp)."\n";
reset($tmp);
echo current($tmp)."\n";
?>
输出
a
d
d
a
所以,取数据第一个元素用reset()即可,
当用current取数组第一个元素时最好reset先,因为此时指针不一定指向数组中的第一个元素。
输出
a
每个数组中都有一个内部的指针指向它的"当前"元素,初始指向插入到数组中的第一个元素。
end() - 将内部指针指向数组中的最后一个元素,并输出
next() - 将内部指针指向数组中的下一个元素,并输出
prev() - 将内部指针指向数组中的上一个元素,并输出
reset() - 将内部指针指向数组中的第一个元素,并输出
each() - 返回当前元素的键名和键值,并将内部指针向前移动
current() 函数返回数组中的当前元素的值。
<?php
$tmp = array('a','b','c','d');
echo current($tmp)."\n";
echo end($tmp)."\n";
echo current($tmp)."\n";
reset($tmp);
echo current($tmp)."\n";
?>
输出
a
d
d
a
所以,取数据第一个元素用reset()即可,
当用current取数组第一个元素时最好reset先,因为此时指针不一定指向数组中的第一个元素。
---end
from https://www.cnblogs.com/lzs-888/p/5772536.html
how-php-get-array-first-last-value-php 获取数组第一个元素 以及最后一个元素以及最后一个元素的键名
Sep
24
说明:由于PHPExcel已更名phpspreadsheet,PHPExcel已不再更新,兼容新版本PHP会存在某些问题,建议升级到PHPSpreadsheet。
PhpSpreadsheet软件依赖https://www.helloweba.net/php/561.html
要使用PhpSpreadsheet需要满足以下条件:
PHP5.6或更改版本,推荐PHP7
支持php_zip扩展
支持php_xml扩展
支持php_gd2扩展
https://github.com/PHPOffice/
Sep
8
window下通过composer 安装laravel5记录
how-window-composer-install-laravel5
前提:
1、已经安装composer
2、可以联网
3、安装php7
进入要安装在目录执行composer create-project laravel/laravel laravel5
记录如下
Installing laravel/laravel (v5.7.0)
- Installing laravel/laravel (v5.7.0): Downloading (100%)
Created project in laravel5
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 71 installs, 0 updates, 0 removals
- Installing vlucas/phpdotenv (v2.5.1): Downloading (100%)
- Installing symfony/css-selector (v4.1.4): Downloading (100%)
- Installing tijsverkoyen/css-to-inline-styles (2.2.1): Downloading (connectinDownloading (100%) - Installing symfony/polyfill-php72 (v1.9.0): Downloading (100%)
- Installing symfony/polyfill-mbstring (v1.9.0): Downloading (100%)
- Installing symfony/var-dumper (v4.1.4): Downloading (100%)
- Installing symfony/routing (v4.1.4): Downloading (100%)
- Installing symfony/process (v4.1.4): Downloading (100%)
- Installing symfony/polyfill-ctype (v1.9.0): Downloading (100%)
- Installing symfony/http-foundation (v4.1.4): Downloading (100%)
- Installing symfony/event-dispatcher (v4.1.4): Downloading (100%) - Installing psr/log (1.0.2): Downloading (100%) - Installing symfony/debug (v4.1.4): Downloading (100%) - Installing symfony/http-kernel (v4.1.4): Downloading (100%) - Installing symfony/finder (v4.1.4): Downloading (100%) - Installing symfony/console (v4.1.4): Downloading (100%) - Installing doctrine/lexer (v1.0.1): Downloading (100%) - Installing egulias/email-validator (2.1.5): Downloading (100%) - Installing swiftmailer/swiftmailer (v6.1.2): Downloading (100%) - Installing paragonie/random_compat (v9.99.99): Downloading (100%) - Installing ramsey/uuid (3.8.0): Downloading (100%) - Installing psr/simple-cache (1.0.1): Downloading (100%) - Installing psr/container (1.0.0): Downloading (100%) - Installing symfony/translation (v4.1.4): Downloading (100%) - Installing nesbot/carbon (1.33.0): Downloading (100%) - Installing monolog/monolog (1.23.0): Downloading (100%) - Installing league/flysystem (1.0.46): Downloading (100%) - Installing erusev/parsedown (1.7.1): Downloading (100%) - Installing dragonmantank/cron-expression (v2.2.0): Downloading (connecting..Downloading (100%) - Installing doctrine/inflector (v1.3.0): Downloading (100%) - Installing laravel/framework (v5.7.2): Downloading (100%) - Installing fideloper/proxy (4.0.0): Downloading (100%) - Installing nikic/php-parser (v4.0.3): Downloading (100%) - Installing jakub-onderka/php-console-color (0.1): Downloading (connecting...Downloading (100%) - Installing jakub-onderka/php-console-highlighter (v0.3.2): Downloading (connDownloading (100%) - Installing dnoegel/php-xdg-base-dir (0.1): Downloading (100%) - Installing psy/psysh (v0.9.8): Downloading (100%) - Installing laravel/tinker (v1.0.7): Downloading (100%) - Installing beyondcode/laravel-dump-server (1.2.1): Downloading (connecting..Downloading (100%) - Installing fzaninotto/faker (v1.8.0): Downloading (100%) - Installing hamcrest/hamcrest-php (v2.0.0): Downloading (100%) - Installing mockery/mockery (1.1.0): Downloading (100%) - Installing filp/whoops (2.2.0): Downloading (100%) - Installing nunomaduro/collision (v2.0.3): Downloading (100%) - Installing sebastian/version (2.0.1): Downloading (100%) - Installing sebastian/resource-operations (1.0.0): Downloading (connecting...Downloading (100%) - Installing sebastian/object-reflector (1.1.1): Downloading (100%) - Installing sebastian/recursion-context (3.0.0): Downloading (100%) - Installing sebastian/object-enumerator (3.0.3): Downloading (100%) - Installing sebastian/global-state (2.0.0): Downloading (100%) - Installing sebastian/exporter (3.1.0): Downloading (100%) - Installing sebastian/environment (3.1.0): Downloading (100%) - Installing sebastian/diff (3.0.1): Downloading (100%) - Installing sebastian/comparator (3.0.2): Downloading (100%) - Installing phpunit/php-timer (2.0.0): Downloading (100%) - Installing phpunit/php-text-template (1.2.1): Downloading (100%) - Installing phpunit/php-file-iterator (2.0.1): Downloading (100%) - Installing theseer/tokenizer (1.1.0): Downloading (100%) - Installing sebastian/code-unit-reverse-lookup (1.0.1): Downloading (connectiDownloading (100%) - Installing phpunit/php-token-stream (3.0.0): Downloading (100%) - Installing phpunit/php-code-coverage (6.0.7): Downloading (100%) - Installing doctrine/instantiator (1.1.0): Downloading (100%) - Installing webmozart/assert (1.3.0): Downloading (100%) - Installing phpdocumentor/reflection-common (1.0.1): Downloading (connecting.Downloading (100%) - Installing phpdocumentor/type-resolver (0.4.0): Downloading (100%) - Installing phpdocumentor/reflection-docblock (4.3.0): Downloading (connectinDownloading (100%) - Installing phpspec/prophecy (1.8.0): Downloading (100%) - Installing phar-io/version (2.0.1): Downloading (100%) - Installing phar-io/manifest (1.0.3): Downloading (100%) - Installing myclabs/deep-copy (1.8.1): Downloading (100%) - Installing phpunit/phpunit (7.3.4): Downloading (100%) symfony/var-dumper suggests installing ext-intl (To show region name in time zone dump) symfony/routing suggests installing doctrine/annotations (For using the annotation loader) symfony/routing suggests installing symfony/config (For using the all-in-one router or any loader) symfony/routing suggests installing symfony/dependency-injection (For loading routes from a service) symfony/routing suggests installing symfony/expression-language (For using expression matching) symfony/routing suggests installing symfony/yaml (For using the YAML loader) symfony/event-dispatcher suggests installing symfony/dependency-injection symfony/http-kernel suggests installing symfony/browser-kit symfony/http-kernel suggests installing symfony/config symfony/http-kernel suggests installing symfony/dependency-injection symfony/console suggests installing symfony/lock egulias/email-validator suggests installing ext-intl (PHP Internationalization Libraries are required to use the SpoofChecking validation) swiftmailer/swiftmailer suggests installing ext-intl (Needed to support internationalized email addresses) swiftmailer/swiftmailer suggests installing true/punycode (Needed to support internationalized email addresses, if ext-intl is not installed) paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.) ramsey/uuid suggests installing ircmaxell/random-lib (Provides RandomLib for use with the RandomLibAdapter) ramsey/uuid suggests installing ext-libsodium (Provides the PECL libsodium extension for use with the SodiumRandomGenerator) ramsey/uuid suggests installing ext-uuid (Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator) ramsey/uuid suggests installing moontoast/math (Provides support for converting UUID to 128-bit integer (in string form).) ramsey/uuid suggests installing ramsey/uuid-doctrine (Allows the use of Ramsey\Uuid\Uuid as Doctrine field type.) ramsey/uuid suggests installing ramsey/uuid-console (A console application for generating UUIDs with ramsey/uuid) symfony/translation suggests installing symfony/config symfony/translation suggests installing symfony/yaml monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB) monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server) monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required)) monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server) monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server) monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver) monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib) monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome) monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar) monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server) monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server) league/flysystem suggests installing ext-fileinfo (Required for MimeType) league/flysystem suggests installing ext-ftp (Allows you to use FTP server storage) league/flysystem suggests installing league/flysystem-aws-s3-v2 (Allows you to use S3 storage with AWS SDK v2) league/flysystem suggests installing league/flysystem-aws-s3-v3 (Allows you to use S3 storage with AWS SDK v3) league/flysystem suggests installing league/flysystem-azure (Allows you to use Windows Azure Blob storage) league/flysystem suggests installing league/flysystem-cached-adapter (Flysystem adapter decorator for metadata caching) league/flysystem suggests installing league/flysystem-eventable-filesystem (Allows you to use EventableFilesystem) league/flysystem suggests installing league/flysystem-rackspace (Allows you to use Rackspace Cloud Files) league/flysystem suggests installing league/flysystem-sftp (Allows you to use SFTP server storage via phpseclib) league/flysystem suggests installing league/flysystem-webdav (Allows you to use WebDAV storage) league/flysystem suggests installing league/flysystem-ziparchive (Allows you to use ZipArchive adapter) league/flysystem suggests installing spatie/flysystem-dropbox (Allows you to use Dropbox storage) league/flysystem suggests installing srmklive/flysystem-dropbox-v2 (Allows you to use Dropbox storage for PHP 5 applications) laravel/framework suggests installing aws/aws-sdk-php (Required to use the SQS queue driver and SES mail driver (^3.0).) laravel/framework suggests installing doctrine/dbal (Required to rename columns and drop SQLite columns (^2.6).) laravel/framework suggests installing ext-pcntl (Required to use all features of the queue worker.) laravel/framework suggests installing ext-posix (Required to use all features of the queue worker.) laravel/framework suggests installing guzzlehttp/guzzle (Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).) laravel/framework suggests installing league/flysystem-aws-s3-v3 (Required to use the Flysystem S3 driver (^1.0).) laravel/framework suggests installing league/flysystem-cached-adapter (Required to use the Flysystem cache (^1.0).) laravel/framework suggests installing league/flysystem-rackspace (Required to use the Flysystem Rackspace driver (^1.0).) laravel/framework suggests installing league/flysystem-sftp (Required to use the Flysystem SFTP driver (^1.0).) laravel/framework suggests installing moontoast/math (Required to use ordered UUIDs (^1.1).) laravel/framework suggests installing nexmo/client (Required to use the Nexmo transport (^1.0).) laravel/framework suggests installing pda/pheanstalk (Required to use the beanstalk queue driver (^3.0).) laravel/framework suggests installing predis/predis (Required to use the redis cache and queue drivers (^1.0).) laravel/framework suggests installing pusher/pusher-php-server (Required to use the Pusher broadcast driver (^3.0).) laravel/framework suggests installing symfony/dom-crawler (Required to use most of the crawler integration testing tools (^4.1).) laravel/framework suggests installing symfony/psr-http-message-bridge (Required to psr7 bridging features (^1.0).) psy/psysh suggests installing ext-pcntl (Enabling the PCNTL extension makes PsySH a lot happier :)) psy/psysh suggests installing ext-posix (If you have PCNTL, you'll want the POSIX extension as well.) psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.) psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.) filp/whoops suggests installing whoops/soap (Formats errors as SOAP responses) sebastian/global-state suggests installing ext-uopz (*) phpunit/php-code-coverage suggests installing ext-xdebug (^2.6.0) phpunit/phpunit suggests installing phpunit/php-invoker (^2.0) phpunit/phpunit suggests installing ext-soap (*) phpunit/phpunit suggests installing ext-xdebug (*) Writing lock file Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover Discovered Package: beyondcode/laravel-dump-server Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully. > @php artisan key:generate Application key [base64:4qM4I6Fxf1o/NjYtnD9Cq7l184K1RM6wws+1spuw3ws=] set successfully. F:\phpStudy\PHPTutorial\WWW>
现在通过http://localhost/laravel5/public,出现下面的内容,就表示已经初步安装完成了。
如果碰到
phpstudy2018本地配置教程You don't have permission to access解决 参考
http://itlife365.com/blog/post/phpstudy2018-no-have-permission-to-access.php
May
28
--begin by itlife365.com
PHP删除目录及目录下所有文件或删除指定文件经典代码收藏分享
- /**
- * 删除目录及目录下所有文件或删除指定文件
- * @param str $path 待删除目录路径
- * @param int $delDir 是否删除目录,1或true删除目录,0或false则只删除文件保留目录(包含子目录)
- * @return bool 返回删除状态
- */
- function delDirAndFile($path, $delDir = FALSE) {
- $handle = opendir($path);
- if ($handle) {
- while (false !== ( $item = readdir($handle) )) {
- if ($item != "." && $item != "..")
- is_dir("$path/$item") ? delDirAndFile("$path/$item", $delDir) : unlink("$path/$item");
- }
- closedir($handle);
- if ($delDir)
- return rmdir($path);
- }else {
- if (file_exists($path)) {
- return unlink($path);
- } else {
- return FALSE;
- }
- }
- }
- php dir del
- how-php-cascade-del-dir
--end by itlife365.com