新域名

TK域名彻底不行了,搜了一下info还挺便宜,就买了个。顺便更新到了wordpress3.9。

这次用的wordpress自带的导出导入功能迁移的站点。首先导入前要把图片等资料上传到空间,若导入完成后后再上传图片,之前的相册则会找不到图片。由于我用的webp图片,需要在wp-includes/functions.php中查找image/jpeg(共两处,注意保持顺序),添加如下代码:

'webp' => 'image/webp',

然后在“设置”-“多媒体”中“中等大小”值均设为0。文章页照片就能正常显示了。然后就还是设置里设置下时间格式固定链接格式。还有插件Akismet就直接复制之前的激活码过来就行。常用的插件还有Revision Control和WP SyntaxHighlighter稍加设置即可。最后还做了下从ft.yuns.pw过来的301重定向以及更新了谷歌跟踪代码。

TK免费域名不行了

之前forty-two.tk突然就不能用了,也没法申诉。今天另外五六个TK域名也突然就失效了。想玩的还是试试别的吧,tk就别试了。虽然没有试过tk的付费域名,但冲其对免费域名这么不在乎的态度我也不会去试了。我用的免费空间http://www.yuns.pw/就做的很好,有问题就可以和客服反映。免费的东西至少基本的服务还是要有的,而tk域名这方面实在是不行。你要收走你的免费服务没问题,但是也不提前通知一声说拿走就拿走,让人无法接受!

谷歌地图坐标展示

已知经纬度、精度、(速度和方向),欲将信息展示在地图上,可以用如下代码:

<html>
<head>
<title>Location-Map</title>
<script
src="<?php 
//GET值为a:latitude,n:longitude,r:accuracy,h:heading,s:speed
//判断是否含有速度方向信息,来选择加载geometry库
if(isset($_GET['s'])&&isset($_GET['h'])&&$_GET["s"]!=0){
    echo 'http://maps.googleapis.com/maps/api/js?libraries=geometry&key=yourMapApiKey&sensor=false';
} else {
    echo 'http://maps.googleapis.com/maps/api/js?key=yourMapApiKey&sensor=false';
}?>">
</script>
 
<script>
var myCenter=new google.maps.LatLng(<?php echo $_GET["a"].",".$_GET["n"]; ?>);
function initialize()
{
  var mapProp = {
    center: myCenter,
    zoom:16,
    mapTypeId: google.maps.MapTypeId.<?php echo $_GET["t"]; ?>
  };

  var map = new google.maps.Map(document.getElementById("googleMap"),mapProp);
  
  var marker=new google.maps.Marker({
  position:myCenter,
  });
  
  var myCity = new google.maps.Circle({
  center:myCenter,
  radius:<?php echo $_GET["r"]; ?>,
  strokeColor:"#0000FF",
  strokeOpacity:0.5,
  strokeWeight:1,
  fillColor:"#0000FF",
  fillOpacity:0.2
  });
<?php
if(isset($_GET['s'])&&isset($_GET['h'])&&$_GET["s"]!=0){
    $s=$_GET['s']*10;
    $h=$_GET['h']+180;
    //使用geometry库来计算起始点
    echo 'var startLL=new google.maps.geometry.spherical.computeOffset(myCenter, '.$s.', '.$h.');';
    echo 'var myTrip=[startLL,myCenter];';
    echo 'var flightPath=new google.maps.Polyline({
  path:myTrip,
  strokeColor:"#0000FF",
  strokeOpacity:0.8,
  strokeWeight:2
  });';
    echo 'flightPath.setMap(map);';
}
?>
  
  marker.setMap(map);
  myCity.setMap(map);
}

google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>

<body>

<div id="googleMap" style="width:400px;height:300px;"></div>
<br>

</body>
</html>

Apache限制IP访问

只需在配置文件中添加如下代码即可:

<Location />
Order Allow,Deny
Allow from localhost
Deny from 192.168.1.*
</Location>

我的配置文件位于/etc/apache2/sites-enabled/000-default。将上面Location节点放在VirtualHost节点内即可。其实现的效果是除本机外其他局域网主机都无法访问站点。

重启Apache时提示Could not reliably determine the server's fully qualifieddomain name可以通过在/etc/apache2/httpd.conf中添加一行ServerName localhost来解决。

最后在记一下修改Ubuntu hosts文件方法:

  1. 打开hosts文件:sudo gedit /etc/hosts
  2. 添加一行:127.0.0.1 localhost
  3. 重启网络:sudo /etc/init.d/networking restart

比较遗憾的是host文件并不支持通配符。

用phpmailer发邮件

function mySendMail($recipient,$recipientName,$subject,$body){
require 'PHPMailerAutoload.php';

date_default_timezone_set("Asia/Shanghai");//设定时区东八区

$mail = new PHPMailer;
$mail->CharSet ="UTF-8";//设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码

$mail->isSMTP();                 // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com';  // Specify main and backup server
$mail->Port = 465;                   // SMTP服务器的端口号
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'name@gmail.com';                 // SMTP username
$mail->Password = '********';                          // SMTP password,谷歌邮箱若开启了两步验证要单独分配密码
$mail->SMTPSecure = 'ssl';                            // Enable encryption, 'ssl' also accepted

$mail->From = 'name@gmail.com';
$mail->FromName = 'no-reply';
$mail->addAddress($recipient, $recipientName);  // Add a recipient, Name is optional

$mail->WordWrap = 50;                                 // Set word wrap to 50 characters   
$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = $subject;
$mail->Body    = $body;

if(!$mail->send()) {
   echo '邮件发送失败';
   echo 'Mailer Error: ' . $mail->ErrorInfo;
   exit;
}

echo '邮件发送成功';
}

使用header对页面授权

此法效果类似路由器的登录页面,会弹出一个登录页。适合一个admin的简单授权管理。结束会话(关闭浏览器)后授权即失效。

首先创建authorize.php,这样只需在需要授权的页面引用即可。内容如下:

<?php
  // User name and password for authentication
  $username = 'rock';
  $password = 'roll';

  if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
    ($_SERVER['PHP_AUTH_USER'] != $username) || ($_SERVER['PHP_AUTH_PW'] != $password)) {
    // The user name/password are incorrect so send the authentication headers
    header('HTTP/1.1 401 Unauthorized');
    header('WWW-Authenticate: Basic realm="特征码"');//需要相同认证的页面标记
    exit('<h2>Hi</h2>Display this message when user select CANCEL.');
  }
?>

在需要授权的页面开始处添加:

<?php
  require_once('authorize.php');
?>

需要注意的是上面这段引用,即授权代码必须放在最前面,其<?php前不能有任何字符,即使是空格也不行。