本文目录一览:
- 1、如何用PHP/MySQL为 iOS App 写一个简单的web服务器 PART1
- 2、PHP有没有办法判断服务器压力过大,访问的人过多
- 3、ios推送消息 用php推送怎么实现
- 4、ios怎样搭建php服务器
如何用PHP/MySQL为 iOS App 写一个简单的web服务器 PART1
作为一个iPhone/iPad开发者,能够自己写一个简单的web服务器将是很有用的。
例如,你可能希望在软件启动时显示一些来自服务器的更新,或者在服务器端保存一些用户数据。除了你的想象力,没有什么能限制你了。
在第一篇中,我们将会一步一步的建立一个web服务器,基于promo code system(促销码系统),我在我的第一个软件中使用的,Wild Fables.在第二篇中,我们将会写一个iOS App来和它进行交互。-ios服务器端php负载
PHP有没有办法判断服务器压力过大,访问的人过多
wp-cron.php进程过多造成服务器负载过大的解决办法
WordPress定时任务(如数据库自动备份、自动发表文章)主要靠wp-cron.php来实现的,其原理如下:当有用户访问Wordpress站点的内容是,Wordpress系统判断当时是否有需要运行的后台任务,如果有则在后台访问wp-cron.php执行定时任务。Wordpress定时任务功能给用户确实带来了很大的方便,但是也有一些用户在使用定时任务时遇到了一些问题。如wp-super-cache缓存插件的用户可能会遇到wp-cron.php进程过多,造成服务器负载过大或虚拟主机CPU配额超标。-ios服务器端php负载
如你遇到wp-cron.php进程过多造成服务器负载过大,可以通过以下方法解决:
1、禁用Wordpress定时任务wp-cron,编辑wp-config.php,加入以下内容:
define( 'DISABLE_WP_CRON' , true);
WordPress定时任务被禁用后,会造成一些功能无法使用,如数据库定时备份、定时发表文章等。如你确需要以上功能,可通过服务器crontab设置定时访问wp-cron.php来执行定时任务,具体方法如下:-ios服务器端php负载
2、在Linux系统的crontab中填加以下内容(请修改对应的Wordpress目录),设置每15分钟访问一次wp-cron.php以执行Wordpress定时任务。
*/15 * * * * php -q /home/public_html/wp-cron.php
ios推送消息 用php推送怎么实现
iOS消息推送的工作机制可以简单的用下图来概括:
Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器。
上图可以分为三个阶段:
第一阶段:应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。
第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。
第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。
1、应用程序注册消息推送。
2、iOS从APNS Server获取device token,应用程序接收device token。
3、应用程序将device token发送给PUSH服务端程序。
4、服务端程序向APNS服务发送消息。
5、APNS服务将消息发送给iPhone应用程序。
无论是iPhone客户端和APNS,还是Provider和APNS,都需要通过证书进行连接。
下面我介绍一下几种用到的证书。
一、CSR文件
1、生成Certificate Signing Request(CSR)
2、填写你的邮箱和常用名称,并选择保存到硬盘。
点击继续:
这样就在本地生成了一个Push.certSigningRequest文件。
二、p12文件
1、导出密钥。
2、输入你的密码。
这样就生成了一个Push.p12文件。
三、SSL certificate文件
1、用你付过费的帐号登录到iOS Provisioning Portal,并新建一个App ID,这个过程可以参考:iOS应用的真机调试,这样就会生成下面这条记录:
2、点击右侧的Configure:
3、点击Development Push SSL Certificate一行后的Configure:
4、点击Continue:
5、选择前面生成好的Push.certSigningRequest文件,点击Generate,出现如下所示的页面:
6、点击Continue:
7、点击Download,并将文件命名为aps_developer_identity.cer。
8、点击Done,你会发现状态变成了Enabled:
到现在为止,我们已经生成了三个文件:
1、Push.certSigningRequest
2、Push.p12
3、aps_developer_identity.cer
双击aps_developer_dientity.cer 注册到你的钥匙串中,这样你的钥匙串中就会有
二、准备profile证书,因为推送消息只能再真机上测试,所以要建一个profile证书
点击"new profile"为上面新建的APP ID建个profile ,成功之后下载*_Dev_Profile.mobileprovision
双击将其加入到xcode 的Provisioning Profiles 中,这里有一点要注意,再将这个加入xcode之前如果之前已经加入过一定要把之前加入的删掉,如果有多个的话会出错。
三、工程代码
到这里证书已经准备完毕,接下来,我们在xcode中新建一个测试工程,注意设置工程的Bundle Identifier必须与上面建的APP ID 里的相同
在didFinishLaunchingWithOptions 中加入一下代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions-ios服务器端php负载
{
[self.window makeKeyAndVisible];
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];-ios服务器端php负载
return YES;
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken {-ios服务器端php负载
NSLog(@"regisger success:%@", pToken);
//注册成功,将deviceToken保存到应用服务器数据库中
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{-ios服务器端php负载
// 处理推送消息
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"通知" message:@"我的信息" delegate:selfcancelButtonTitle:@"取消" otherButtonTitles:nil, nil];-ios服务器端php负载
[alert show];
[alert release];
NSLog(@"%@", userInfo);
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {-ios服务器端php负载
NSLog(@"Regist fail%@",error);
}
到这里一切顺利的话我们就可以在真机运行了,注册成功我们会得到iphone 的deviceToken,
My token is:
四、在应用服务器采用php的方式将消息推送给APNS,
1、php连接APNS也是需要证书的,还记得我们上面获得的几个证书吗?打开终端,对上面的证书做如下处理,
cd 进入证书所在目录
把.cer文件转换成.pem文件:
$ openssl x509 -in aps_developer_identity.cer -inform der
-out PushChatCert.pem
把私钥Push.p12文件转换成.pem文件:
$ openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying – Enter PEM pass phrase:
你首先需要为.p12文件输入passphrase密码短语,这样OpenSSL可以读它。然后你需要键入一个新的密码短语来加密PEM文件。还是使用”pushchat”来作为PEM的密码短语。你需要选择一些更安全的密码短语。-ios服务器端php负载
注意:如果你没有键入一个PEM passphrase,OpenSSL将不会返回一个错误信息,但是产生的.pem文件里面将不会含有私钥。
最后。把私钥和证书整合到一个.pem文件里:
$ cat PushChatCert.pem PushChatKey.pem ck.pem
为了测试证书是否工作,执行下面的命令:
$ telnet gateway.sandbox.push.apple.com 2195
Trying 17.172.232.226…
Connected to gateway.sandbox.push-apple.com.akadns.net.
Escape character is ‘^]’.
它将尝试发送一个规则的,不加密的连接到APNS服务。如果你看到上面的反馈,那说明你的MAC能够到达APNS。按下Ctrl+C 关闭连接。如果得到一个错误信息,那么你需要确保你的防火墙允许2195端口。-ios服务器端php负载
然后再次连接,这次用我们的SSL证书和私钥来设置一个安全的连接:
$ openssl s_client -connect gateway.sandbox.push.apple.com:2195
-cert PushChatCert.pem -key PushChatKey.pem
Enter pass phrase for PushChatKey.pem:
你会看到一个完整的输出,让你明白OpenSSL在后台做什么。如果连接是成功的,你可以键入一些字符。当你按下回车后,服务就会断开连接。如果在建立连接时有问题,OpenSSL将会给你一个错误消息,
ck.pem文件就是我们需要得到php连接APNS 的文件,将ck.pem和push.php放入同一目录上传到服务器,push.php的代码如下:
?php
// 这里是我们上面得到的deviceToken,直接复制过来(记得去掉空格)
$deviceToken = '740f4707bebcf74f 9b7c25d4 8e3358945f6aa01da5ddb387462c7eaf 61bb78ad';
// Put your private key's passphrase here:
$passphrase = 'abc123456';
// Put your alert message here:
$message = 'My first push test!';
////////////////////////////////////////////////////////////////////////////////
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// Open a connection to the APNS server
//这个为正是的发布地址
//$fp = stream_socket_client(“ssl://gateway.push.apple.com:2195“, $err, $errstr, 60, //STREAM_CLIENT_CONNECT, $ctx);-ios服务器端php负载
//这个是沙盒测试地址,发布到appstore后记得修改哦
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
echo 'Connected to APNS' . PHP_EOL;
// Create the payload body
$body['aps'] = array(
'alert' = $message,
'sound' = 'default'
);
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
echo 'Message not delivered' . PHP_EOL;
else
echo 'Message successfully delivered' . PHP_EOL;
// Close the connection to the server
fclose($fp);
?
接下来我们访问
iphone就会接收到一条推送消息了,如果有问题的话就检查上面的操作步骤,特别是加红的部分
另外去除标记的方法为,在viewDidApper中加入
int badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
if(badge 0)
{
badge--;
[UIApplication sharedApplication].applicationIconBadgeNumber = badge;
}
ios怎样搭建php服务器
一、准备
一台安装了OS X操作系统的电脑(笔记本或一体机)
电脑上安装了Xcode
能连接到互联网——我们需要从网络上下载一些资源
了解基本的PHP代码基础和Mysql执行语句
二、基本步骤
配置PHP Apache环境
下载并安装MySql
下载并使用phpMyAdmin
三、详细操作
1.配置PHP Apache环境
Mac OS上自带PHP Apache环境,所以不需要另外下载安装包,只需要简单配置一下即可。
(1)由于Apache目录是隐藏目录,如果系统目前不显示隐藏文件和文件夹,我们可以通过在Finder窗口下使用Command+Shift+G组合快捷键,或者在Finder状态下点击顶部状态栏的“前往——前往文件夹”,在打开的对话框中输入-ios服务器端php负载
/etc/apache2
进入apache2目录,然后使用文本编辑器打开名为“httpd.conf”的文件,如图1所示。
图1
(2)“httpd.conf”的文件中查询到如下代码:
#LoadModule php5_module libexec/apache2/libphp5.so
将该代码前面的#号删除,从而在Apache中启用PHP5模块。然后保存文件。
在保存文件时,如果提示没有修改该文件的系统权限时,右键点击该文件,选择“显示简介”,然后点击最右下角的小锁图标,将Privilege修改为ReadWrite即可。同时我们还需要修改apache2这个文件夹的权限。-ios服务器端php负载
(3)接下来,打开“系统偏好设置”,选择“共享”选项卡,在打开的对话框中确保“互联网共享”未处于勾选状态(笔者的系统是10.12.3版本),如图2所示。
图2
(4)最后,在终端输入如下指令重启apache:
sudo apachectl restart
此时,在浏览器输入
并回车,如果出现如图3所示的结果,说明PHP环境配置成功。
图3
2.下载并安装MySql
(1)进入MySQL官网下载页面,在“Select Operating System:”下拉列表中选择Mac OS X之后,在给出的下载列表中选择DMG格式的文件进行下载。
(2)下载完成后打开,可以看到如图4所示的文件。先点击安装文件"mysql-5.7.18-macos10.12-x86_64.dmg"。
图4
(3)安装完成后,MySQL会给出一个默认密码,保存一下这个密码,下面会用到。选择“系统偏好设置”,搜索到“MySQL”,点击打开,然后开启MsSQL,并勾选“开机自启动”选项,如图5所示。
图5
(4)打开终端,输入如下指令:
mysql -version
若提示“-bash: mysql: command not found”,就需要先配置mysql bin目录的环境变量。
首先,在Finder状态下,点击屏幕上方导航栏“前往——前往文件夹”,在弹出来的对话框中输入“/etc/bashrc”,点击确定。
然后,使用文本编辑打开“bashrc”文件(仍然别忘了修改这个文件的读写权限),在末尾加入如下代码:
#mysqlalias mysql='/usr/local/mysql/bin/mysql'alias mysqladmin='/usr/local/mysql/bin/mysqladmin'
然后,我们要修改MySQL给出的默认密码。打开终端,输入如下指令并回车:
mysqladmin -u root -p password
然后终端提示“Enter password:”在此输入刚才安装完MySQL之后分配的默认密码,然后回车,提示“New password:”,在此输入新的密码并回车,在“Confirm new password: ”后再次输入新密码并回车,则密码就重置完成了。-ios服务器端php负载
(5)如果使用终端来进行MySQL操作,无疑是一件很痛苦的事情。所以一般我们使用phpMyAdmin来进行数据库的操作。前往phpAdmin下载页面根据自己的需要下载phpAdmin(我下载的是phpMyAdmin-4.7.0-all-languages.zip)。下载完成后,解压缩,并将解压缩之后的文件夹改名为phpMyadmin。然后将该文件夹复制到“/Library/WebServer/Documents/”目录下。-ios服务器端php负载
(6)进入phpMyadmin文件夹,复制一个名为“config.sample.inc.php”的文件,粘贴到当前目录下,并改名为“config.inc.php”。
(7)使用文本编辑器打开“config.inc.php”,将
$cfg['Servers'][$i]['host'] = 'localhost';
修改为:
$cfg['Servers'][$i]['host'] = '127.0.0.1';
保存后,在浏览器输入
进入phpAdmin登入界面,用户名输入为root,密码为在第(4)步设置的新密码。进入后能正常使用phpAdmin来操作MySQL。
作者:三创iOS和PHP开发
链接:
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。