wampserver局域网访问phpmyadmin 403错误
wampserver修改alias/phpmyadmin.conf
require local => require all granted
AllowOverride all
Order Deny,Allow
Allow from all
wampserver修改alias/phpmyadmin.conf
require local => require all granted
AllowOverride all
Order Deny,Allow
Allow from all
来源:http://www.codeweblog.com/php%E4%BF%AE%E6%94%B9png%E5%9B%BE%E7%89%87dpi/
最近使用PHP生成图片用于打印,但是浏览器默认输出为72DPI,打印要求为300DPI,如果直接打印,图片会比较模糊。
在网上找了一圈,大部分链接都指向ImageMagick,但是我的项目部署在新浪SAE,新浪SAE不支持它。继续找,发现了《PHP 使用GD函式庫更改圖片DPI》这篇文章,提供了修改JPG图片分辨率的方法,亲测可行。但是我的项目必须使用PNG图片,因为用的是透明背景,所以上面的方法还不行,但是可以参考思路。后来又找到了另外一篇文章《PHP: Dpi of a png image》,这篇文章提供了获取PNG图片分辨率的方法,遗憾的是作者并没有给出设置分辨率的方法。
最后,被逼无奈,硬着头皮自己写啦,挣扎一番终于成功了。这是我写的测试例子:
<?php
$filename = 'img/example.png';
// ob_start();
// $im = imagecreatefrompng($filename);
// imagepng($im);
// $file = ob_get_contents();
// ob_end_clean();
$file = file_get_contents($filename);
//数据块长度为9
$len = pack("N", 9);
//数据块类型标志为pHYs
$sign = pack("A*", "pHYs");
//X方向和Y方向的分辨率均为300DPI(1像素/英寸=39.37像素/米),单位为米(0为未知,1为米)
$data = pack("NNC", 300 * 39.37, 300 * 39.37, 0x01);
//CRC检验码由数据块符号和数据域计算得到
$checksum = pack("N", crc32($sign . $data));
$phys = $len . $sign . $data . $checksum;
$pos = strpos($file, "pHYs");
if ($pos > 0) {
//修改pHYs数据块
$file = substr_replace($file, $phys, $pos - 4, 21);
} else {
//IHDR结束位置(PNG头固定长度为8,IHDR固定长度为25)
$pos = 33;
//将pHYs数据块插入到IHDR之后
$file = substr_replace($file, $phys, $pos, 0);
}
header("Content-type: image/png");
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
echo $file;
?>
这篇文章应该也可以作为《各位兄弟姐妹,php 怎么可以生成一张300分辨率的图片,谢谢》的一个答案。
本文参考的其他资料:
《W3C PNG Specification》
《png文件的数据结构》
《分析PNG图像文件结构(3)》
在网上搜索的过程中还遇到了一些有用的资料,也放在这里吧:
《JavaScript修改Canvas图片的分辨率(DPI)》
《PNG设置分辨率》(使用了Linux函数png_set_pHYs)
最后说一句,有条件还是使用ImageMagick,没必要这么折腾!
由于没有配置信任的服务器HTTPS验证。默认,cURL被设为不信任任何CAs,就是说,它不信任任何服务器验证。
解决:
下载:https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt
放置php5.6.31\extras\ssl目录下
php.ini搜索curl.cainfo配置地址:"D:\install\wamp64\bin\php\php5.6.31\extras\ssl\ca-bundle.crt"
安装提示vcruntime140.dll丢失
需重装vc++2015
下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=48145
很多时候使用第三方模板会产生很多无用的css样式,如果比较在意可以使用下面方法尝试处理。
1.firfox安装插件dust-me-selectors
https://addons.mozilla.org/en-US/firefox/addon/dust-me-selectors/
2.chrome直接运行开发者工具 Audits 选项,选中audit present state点击run即可
3.在线工具
http://gtmetrix.com/remove-unused-css.html
https://unused-css.com/
4.其他
但需注意,通常一个样式表会在不同页面同时使用,如果依据一个页面的分析删除了未使用的样式,那你该呵呵了~
以前全栈也懒得用版本管理,最近同事想备份代码求心安,索性搭一个svn,别问我为啥不用git,同事喜欢图形~
yum install subversion mod_dav_svn
mkdir -p /www/svn/project1 /www/svn/project2
svnadmin create /www/svn/project1[project2]
cd /www/svn/project/conf
vi passwd
[users]
icecry=icecry
vi authz
[aliases]
[groups]
[/]
icecry=rw
* =
vi svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
[sasl]
# use-sasl = true
# min-encryption = 0
# max-encryption = 256
启动
svnserve -d -r /www/svn
查看
ps -ef|grep svn
netstat -ln |grep 3690
关闭
killall svnserve
accept: {
title: 'Images',
extensions: 'jpg,jpeg,png',
//mimeTypes: 'image/*' //修改此行为具体类型,如下
mimeTypes: 'image/jpg,image/jpeg,image/png,image/gif,image/bmp' //修改这行
}
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.wiggins.teaching.utils;
import android.util.Base64;
import java.io.UnsupportedEncodingException;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class AESHelper {
private static final String CipherMode = "AES/ECB/PKCS5Padding";
private static final String password = "Coding@xxx.China";
public AESHelper() {
}
private static SecretKeySpec createKey(String password) {
byte[] data = null;
if(password == null) {
password = "";
}
StringBuffer sb = new StringBuffer(16);
sb.append(password);
while(sb.length() < 16) {
sb.append("0");
}
if(sb.length() > 16) {
sb.setLength(16);
}
try {
data = sb.toString().getBytes("UTF-8");
} catch (UnsupportedEncodingException var4) {
var4.printStackTrace();
}
return new SecretKeySpec(data, "AES");
}
public static byte[] encrypt(byte[] content, String password) {
try {
SecretKeySpec e = createKey(password);
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(1, e);
byte[] result = cipher.doFinal(content);
return result;
} catch (Exception var5) {
var5.printStackTrace();
return null;
}
}
public static String encrypt(String content, String password) {
byte[] data = null;
try {
data = content.getBytes("UTF-8");
} catch (Exception var4) {
var4.printStackTrace();
}
data = encrypt(data, password);
String result = Base64.encodeToString(data, 2);
return result;
}
public static String encrypt(String content) {
byte[] data = null;
try {
data = content.getBytes("UTF-8");
} catch (Exception var3) {
var3.printStackTrace();
}
data = encrypt(data, "sgg45747ss223455");
String result = Base64.encodeToString(data, 2);
return result;
}
public static byte[] decrypt(byte[] content, String password) {
try {
SecretKeySpec e = createKey(password);
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(2, e);
byte[] result = cipher.doFinal(content);
return result;
} catch (Exception var5) {
var5.printStackTrace();
return null;
}
}
public static String decrypt(String content, String password) {
byte[] data = null;
try {
data = Base64.decode(content, 2);
} catch (Exception var6) {
var6.printStackTrace();
}
data = decrypt(data, password);
if(data == null) {
return null;
} else {
String result = null;
try {
result = new String(data, "UTF-8");
} catch (UnsupportedEncodingException var5) {
var5.printStackTrace();
}
return result;
}
}
public static String decrypt(String content) {
byte[] data = null;
try {
data = Base64.decode(content, 2);
} catch (Exception var5) {
var5.printStackTrace();
}
data = decrypt(data, "sgg45747ss223455");
if(data == null) {
return null;
} else {
String result = null;
try {
result = new String(data, "UTF-8");
} catch (UnsupportedEncodingException var4) {
var4.printStackTrace();
}
return result;
}
}
public static String byte2hex(byte[] b) {
StringBuffer sb = new StringBuffer(b.length * 2);
String tmp = "";
for(int n = 0; n < b.length; ++n) {
tmp = Integer.toHexString(b[n] & 255);
if(tmp.length() == 1) {
sb.append("0");
}
sb.append(tmp);
}
return sb.toString().toUpperCase();
}
private static byte[] hex2byte(String inputString) {
if(inputString != null && inputString.length() >= 2) {
inputString = inputString.toLowerCase();
int l = inputString.length() / 2;
byte[] result = new byte[l];
for(int i = 0; i < l; ++i) {
String tmp = inputString.substring(2 * i, 2 * i + 2);
result[i] = (byte)(Integer.parseInt(tmp, 16) & 255);
}
return result;
} else {
return new byte[0];
}
}
}