php
header("Location: $url"); 不跳轉
添加exit();
@ 不顯示錯誤信息(加在函數前)
PHP導出EXCEL亂碼
ob_end_clean();
PHP驗證碼不顯示
ob_clean();
文件上傳對象爲空
修改PHP上傳文件大小限制
1. 通常的文件上傳,除非文件很小.就像一個5M的文件,極可能要超過一分鐘才能上傳完.
但在php中,默認的該頁最久執行時間爲 30 秒.就是說超過30秒,該腳本就中止執行.
這就致使出現 沒法打開網頁的狀況.這時咱們能夠修改 max_execution_time
在php.ini裏查找
max_execution_time
默認是30秒.改成
max_execution_time = 0
0表示沒有限制
2. 修改 post_max_size 設定 POST 數據所容許的最大大小。此設定也影響到文件上傳。
php默認的post_max_size 爲2M.若是 POST 數據尺寸大於 post_max_size $_POST 和 $_FILES superglobals 便會爲空.
查找 post_max_size .改成post_max_size = 150M
3. 不少人都會改了第二步.但上傳文件時最大仍然爲 8M.
爲何呢.咱們還要改一個參數upload_max_filesize 表示所上傳的文件的最大大小。
查找upload_max_filesize,默認爲8M改成
upload_max_filesize = 100M
另外要說明的是,post_max_size 大於 upload_max_filesize 爲佳.
nginx下修改 http下添加 client_max_body_size 100m;
PHP默認輸出的是HTML代碼,如何轉換成效果輸出?
用html_entity_decode()處理一下:
discuz更換域名頭像不顯示
進入後臺->站長->Ucneter設置,在「UCenter 訪問地址」,將就域名替換成新的域名便可;
進過上面的步驟,圖片依舊麼有出來,那麼更改如下/config/config_ucenter.php文件,將舊域名換成新域名便可
APP對接微信支付,二次簽名,APP返回-1
統一下單接口返回正常的prepay_id,再按簽名規範從新生成簽名後,將數據傳輸給APP。參與簽名的字段名爲appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式爲Sign=WXPay
所有改爲小寫
json_decode函數處理json返回值是NULL
可使用使用json_last_error()函數獲取到的返回值來幫助咱們判斷出問題的緣由。
其中若是提示錯誤JSON_ERROR_SYNTAX(Syntax error),表示json串格式錯誤。
能夠經過如下幾個方式排錯:
1. json字符串必須以雙引號包含 $output = str_replace(",Bf$output);
2. json字符串必須是utf8編碼 $output = iconv('gbk', 'utf8', $output);
3. 不能有多餘的逗號如:[1,2,]
用正則替換掉,preg_replace(_/,\s*([\]}])/m,,*$1,,$output);
模擬php curl向遠程服務器上傳文件
header('content-type:text/html;charset=utf8');
$ch = curl_init();
//加@符號curl就會把它當成是文件上傳處理
$data = array('img'=>'@'. dirname(__FILE__).'/img/1.jpg');
curl_setopt($ch,CURLOPT_URL,"http://localhost:8088/curl/get_img.php");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
$result = curl_exec($ch);
curl_close($ch);
echo json_decode($result);
掌上論壇客戶端宣傳頁出現亂碼的解決方法
一、執行下面的sql語句(若是表前綴不是默認的請自行更改)
- UPDATE `pre_common_plugin` SET `modules` = 'a:4:{i:0;a:10:{s:4:"name";s:6:"mobile";s:4:"menu";s:0:"";s:3:"url";s:0:"";s:4:"type";s:2:"28";s:7:"adminid";s:1:"0";s:12:"displayorder";s:1:"0";s:8:"navtitle";s:0:"";s:7:"navicon";s:0:"";s:10:"navsubname";s:0:"";s:9:"navsuburl";s:0:"";}i:1;a:10:{s:4:"name";s:6:"mobile";s:4:"menu";s:0:"";s:3:"url";s:0:"";s:4:"type";s:2:"11";s:7:"adminid";s:1:"0";s:12:"displayorder";s:1:"0";s:8:"navtitle";s:0:"";s:7:"navicon";s:0:"";s:10:"navsubname";s:0:"";s:9:"navsuburl";s:0:"";}s:6:"system";i:2;s:5:"extra";a:2:{s:11:"installtype";s:10:"langexists";i:1;}}',
- `version` = '1.03' WHERE `pre_common_plugin`.`identifier` ='mobile';
複製代碼
二、更新緩存
廣告圖片上傳失敗:瀏覽器插件屏蔽
報錯:No input file specified
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] index.php後加一?
PHP redis擴展安裝32位的
七牛SDK報錯 ucwords() expects exactly 1 parameter, 2 given
// $kv[0] = ucwords($kv[0], '-');
$kv[0] = ucwords($kv[0]);
PHP5.6下會產生以下警告
Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the
php://input stream instead. in Unknown on line 0
Warning: Cannot modify header information - headers already sent in Unknown on line 0
切換PHP5.5
PHP編譯擴展
./configure --prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc/ --with-mysql=/phpstudy/mysql --with-apxs2=/phpstudy/server/httpd/bin/apxs --enable-mbstring --with-curl --enable-fpm --enable-mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql-sock=/phpstudy/data/mysql.sock --with-mcrypt=/usr/local/libmcrypt --enable-sockets --with-gd --enable-gd-native-ttf --with-freetype-dir=/usr/local/freetype --with-jpeg-dir=/usr/lib/libjpeg.6 --enable-exif
/usr/bin/env: php: No such file or directory解決方法
Linux CentOS系統上安裝完php和MySQL後,爲了使用方便,須要將php和mysql命令加到系統命令中,若是在沒有添加到環境變量以前,執行「php -v」命令查看當前php版本信息時時,則會提示命令不存在的錯誤,下面咱們詳細介紹一下在linux下將php和mysql加入到環境變量中的方法(假設php和mysql分別安裝在/usr/local/webserver/php/和/usr/local/webserver/mysql/中)。
方法一:直接運行命令export PATH=$PATH:/usr/local/php/bin 和 export PATH=$PATH:/usr/local/mysql/bin
使用這種方法,只會對當前會話有效,也就是說每當登出或註銷系統之後,PATH 設置就會失效,只是臨時生效。
方法二:執行vi ~/.bash_profile修改文件中PATH一行,將/usr/local/php/bin 和 /usr/local/mysql/bin 加入到PATH=$PATH:$HOME/bin一行以後
這種方法只對當前登陸用戶生效
方法三:修改/etc/profile文件使其永久性生效,並對全部系統用戶生效,在文件末尾加上以下兩行代碼
PATH=$PATH:/usr/local/webserver/php/bin:/usr/local/mysql/bin
export PATH
最後:執行 命令source /etc/profile或 執行點命令 ./profile使其修改生效,執行完可經過echo $PATH命令查看是否添加成功。
php解析不了百度地圖api返回的json
除掉callback參數
PHPExcel在PHP7中沒法導出的解決方法
錯誤語法致使:打開PHPExcel\Calculation\Functions.php文件,刪除掉581行的break便可。
PHP Fatal error: Call to undefined function pcntl_fork()
重新編譯php ./configure --enable-pcntl
php 7 安裝多進程擴展 pcntl
將 phpize 變成系統命令,使用ln 方式,命令爲:
ln -s /usr/local/php7/bin/phpize /usr/bin/phpize
第二步: 在 /soft/PHP-7.1.1/ext/pcntl 目錄下執行 phpize 命令,生成編譯文件
./configure --with-php-config=/usr/local/php7/bin/php-config
make && make install
$ vim /etc/php/7.0/php.ini
extension=pcntl.so
解決Call to undefined function imagettftext()方法
首先安裝 FreeType, 我這裏安裝的是2.4.0:
wget http://download.savannah.gnu.org/releases/freetype/freetype-2.4.0.tar.bz2
tar -jxf freetype-2.4.0.tar.bz2
cd freetype-2.4.0
./configure --prefix=/usr/local/freetype
make && make install
第一種是直接編譯php,在php configure 編譯選項中加上
--with-freetype-dir=/usr/local/freetype
第二種方案比較簡單些,既然是GD庫的擴展有問題,那麼直接把gd庫的擴展從新編譯,爲它指定freetype的路徑就行了。如下假設 {php_source_dir} 爲你下載的php源碼的目錄, {php_install_dir}
cd {php_source_dir}/ext/gd
phpize
./configure --with-freetype-dir=/usr/local/freetype --with-php-config={php_install_dir}/bin/php-config
make && make install
$ vim /etc/php/7.0/php.ini
extension=gd.so
配置PHP支持socket擴展
cd /usr/local/php/ext/sockets/
執行phpize工具,執行後,能夠看到目錄下生成了對應的configure文件
/usr/local/php/bin/phpize
如今就能夠經過configure來配置,執行下面的命令:
./configure --prefix=/usr/local/php --with-php-config=/usr/local/php/bin/php-config --enable-sockets
make && make install
執行以後,能夠看到下面的輸出:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613
第一個就是擴展模塊的生成目錄,能夠在該目錄下看到對應的sockets.so文件
$ vim /etc/php/7.0/php.ini
extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/sockets.so"
PHP7安裝Redis擴展
git clone https://github.com/phpredis/phpredis.git
$ cd phpredis
$ git checkout php7
$ phpize
$ ./configure
$ make && make install
$ vim /etc/php/7.0/php.ini
extension=redis.so
安裝memcached擴展
/phpstudy/server/php/lib/php/extensions/no-debug-non-zts-20121212/
memcache.so
$ vim /etc/php/7.0/php.ini
extension=memcache.so
PHP的內存限制 Allowed memory size of 134217728 bytes exhausted
兩種方法解決
一、修改php.ini
memory_limit = 128
這種方法須要重啓服務器,很顯然,此方法對虛擬機有限制。
二、經過ini_set函數修改配置選項值
ini_set ('memory_limit', '128M')
php-fpm重啓
/etc/init.d/php-fpm restart
Workman啓動失敗的解決方法 stream_socket_server() has been disabled for security reasons
Remove the stream_socket_server string from the disable_functions at php.ini* file
curl: (60) SSL certificate problem: unable to get local issuer certificate
1. 下載 CA 證書
你能夠從 http://curl.haxx.se/ca/cacert.pem 下載 或者 使用微信官方提供的證書中的 CA 證書 rootca.pem 也是一樣的效果。
2. 在 php.ini 中配置 CA 證書
只須要將上面下載好的 CA 證書放置到您的服務器上某個位置,而後修改 php.ini 的 curl.cainfo 爲該路徑(絕對路徑!),重啓 php-fpm 服務便可。
curl.cainfo = /path/to/downloaded/cacert.pem
該網頁沒法正常運做 目前沒法處理此請求HTTP ERROR 500?
display_errors = On
display_startup_errors = On
用array_walk_recursive()函數就很是靈活,能夠把任意維度的數組轉換成一維數組。
$result = [];
array_walk_recursive($user, function($value) use (&$result) {
array_push($result, $value);
});
nginx php-fpm中啓用慢日誌配置(用於檢測執行較慢的PHP腳本)
hp-fpm.conf
request_slowlog_timeout =0表示關閉慢日誌輸出。
當request_slowlog_timeout 設爲一個具體秒時request_slowlog_timeout =5,表示若是哪一個腳本執行時間大於5秒,會記錄這個腳本到慢日誌文件中
慢日誌文件位置默認在php的安裝目錄下的log文件夾中,能夠經過修改slowlog =/var/log/slow.log參數來指定。
過濾微信暱稱中的表情(不過濾 HTML 符號)
function filterNickname($nickname)
{
$nickname = preg_replace('/[\x{1F600}-\x{1F64F}]/u', '', $nickname);
$nickname = preg_replace('/[\x{1F300}-\x{1F5FF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{1F680}-\x{1F6FF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{2600}-\x{26FF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{2700}-\x{27BF}]/u', '', $nickname);
$nickname = str_replace(array('"','\''), '', $nickname);
return addslashes(trim($nickname));
}
PHP二維數組(或任意維數組)轉換成一維數組的方法彙總
用array_walk_recursive()函數就很是靈活,能夠把任意維度的數組轉換成一維數組。
$result = [];
array_walk_recursive($user, function($value) use (&$result) {
array_push($result, $value);
});