发现php里获取https内容有问题,所以查了很多资料,发现确实有这个问题,也同时对比了一下,想尝试解决这个问题。

phpinfo里打印的curl的信息:
libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2

以前正常的服务器的curl信息:
libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5

测试过同样的代码,http请求没有问题,https请求,网页直接返回502错误
后面一个文章提示 fastcgi_param的问题,测试过没有效果。

怀疑是curl和openssl的问题,因为版本里是NSS,不是OpenSSL
这有一份对比 http://curl.haxx.se/docs/ssl-compared.html

想着试试重新安装curl和openssl
参考这个:linux php源码包 安装openssl 和curl 扩展  
http://yonghui702.blog.163.com/blog/static/81718342013111953738670/

安装过后,配置php.ini,重启php,也没有发现curl的信息发生改变
测试结果也没有正常

也有yum安装更新了curl和openssl,没感觉有效

strace跟踪一下php的进程,也不太会看,但不知道为啥,后面是正常了
看phpinfo的信息倒是没变

本文没有查到明确的解决方式,只是多尝试了几个方式,没有明确哪个产生了解决效果
所以,纯当参考吧

更多参考:
http://bbs.51cto.com/thread-1077956-1-1.html
http://stackoverflow.com/questions/17439199/php-fpm-crashed-when-curl-or-file-get-contents-request-a-https-url
https://bugs.php.net/bug.php?id=19301
https://bugs.php.net/bug.php?id=47616
列举几个我觉得还常用的:

1 Ctrl+Shift+O 将缺少的import语句
2 Ctrl+Shift+F 程序代码自动排版
3 默认是"."才提示,可以修改为输入字符就提示
Preferences - java - Editor - Content Assist
Auto Activation trigger for java:里面有个点,表示如果在java里输入点号,就会在后面出现相应的提示。 你也可以在里面增加其他触发提示的符号,比如a-z都填上
4 Ctrl+/ 注释当前行,再按则取消注释
5 Ctrl+L 定位在某行
6 显示行号:Window->Preferences>General->Editors->Text Editors->勾选show line numbers
7 F3  跳到声明或定义的地方
8 Ctrl+M 最大化当前的Edit或View (再按则反之)

相关的几篇文章:
1 Eclipse工具使用技巧总结
http://www.cnblogs.com/linlf03/archive/2012/12/07/2807699.html
2 谈谈eclipse使用技巧一
http://www.cnblogs.com/manuosex/p/3602262.html
IOS嵌入UIWebView后,网页里获取到的user-agent和Safari是一样的,为了可以区别是app里面的访问,我们可以修改user-agent来做到这一点。

当然,可以完全指定新的user-agent,但正常点还是追加一些信息会更好,比如把app包名最后一节和版本号加上:

BOOL shutDownUserAgent = YES;
NSString *oldAgent = [myWeb stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSString *package = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"];
NSString *ext = [[package componentsSeparatedByString:@"."] lastObject];
NSString *myAgent = [NSString stringWithFormat:@" %@/%@", ext, version];

//自定义user-agent
if ( shutDownUserAgent ){
    if ([oldAgent hasSuffix:myAgent]) {
        NSString *newAgent = [oldAgent stringByReplacingOccurrencesOfString:myAgent withString:@""];
        NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:newAgent, @"UserAgent", nil];
        [[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
    }
}else{
    if (![oldAgent hasSuffix:myAgent]) {
        NSString *newAgent = [oldAgent stringByAppendingString:myAgent];
        //NSLog(@"new agent :%@", newAgent);
        NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:newAgent, @"UserAgent", nil];
        [[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
    }
}


这里有个开关shutDownUserAgent,其实是为了方便添加或者移除标记
因为这个设置后,所有uiwebview都是这个user-agent啦
所以,也不能一直追加,需要检查是否已经有追加过了
这个代码可以多次执行,封装到一个公用的函数去执行就可以

参考例子:http://blog.csdn.net/fangzhangsc2006/article/details/25840709
IOS里 case语段里定义变量会提示出错
case 0:
NSString *a=@"test";
break;


改一下就可以:
case 0:{
NSString *a=@"test";
break;}


IOS7需要授权才能保存相片到相册
所以查询现在的授权状态是很有必要,有用到的可以参考我的代码

//保存按钮点击
-(void)saveBtnClicked:(id)sender
{
    ALAuthorizationStatus author = [ALAssetsLibrary authorizationStatus];
    switch (author) {
        case ALAuthorizationStatusNotDetermined:{
            NSString *tips = @"请允许本App可以访问相册";
            UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"保存到相册需要授权" message:tips delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil] autorelease];
            alert.tag = actionSheet_album_tag;
            [alert show];
            return;
            break;
        }
            
        case ALAuthorizationStatusRestricted:{
            NSString *tips = @"你的权限受限";
            UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"保存到相册需要授权" message:tips delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil] autorelease];
            [alert show];
            return;
            break;
        }
        
        case ALAuthorizationStatusDenied:{
            NSString *tips = @"需要保存图片到相册\n请授权本App可以访问相册\n设置方式:手机设置->隐私->照片\n允许本App访问相册";
            UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"图片保存失败!" message:tips delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil] autorelease];
            [alert show];
            return;
            break;
        }
            
        case ALAuthorizationStatusAuthorized:
            break;
        
        default:
            break;
    }
    [self doSaveToLocal];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    [self doSaveToLocal];
}

//保存到相册
-(void)doSaveToLocal
{
    UIImageView *photo = (UIImageView*)[self.page viewWithTag:IMG_VIEW_TAG];
    UIImageWriteToSavedPhotosAlbum(photo.image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}


参考说明:

引用
当你第一次在应用中打开相册的时候,系统会提示你时候允许用户访问相册,如果你选择不允许的话,你以后在该应用中将无法访问相册。如果想要重新允许,那么需要你去“隐私设置”里面去设置。在程序中怎么获取用户是否拥有对相册的访问权限,然后做相应地操作呢,首先下面列出了相册的一些权限值和对应的含义
typedef NS_ENUM(NSInteger, ALAuthorizationStatus) {
ALAuthorizationStatusNotDetermined = 0, 用户尚未做出了选择这个应用程序的问候
ALAuthorizationStatusRestricted,        此应用程序没有被授权访问的照片数据。可能是家长控制权限。
ALAuthorizationStatusDenied,            用户已经明确否认了这一照片数据的应用程序访问.
ALAuthorizationStatusAuthorized         用户已授权应用访问照片数据.
}

我们在应用中只需要通过ALAuthorizationStatus author = [ALAssetsLibrary authorizationStatus];相册的权限值,  然后做相应的操作。

1.在ios7之前摄像头是一直可以访问的,隐私设置选项中没有关闭相应软件的摄像头功能的选项。在ios7以后摄像头和相册一样增加了访问权限的设置,应用中第一次访问摄像头的时候,系统会询问你是否授权应用访问你的摄像头。摄像头的权限和相册的权限基本上一样,有:
typedef NS_ENUM(NSInteger, AVAuthorizationStatus) {
AVAuthorizationStatusNotDetermined = 0,
AVAuthorizationStatusRestricted,
AVAuthorizationStatusDenied,
AVAuthorizationStatusAuthorized
} NS_AVAILABLE_IOS(7_0);

我们可以通过
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];  获取对摄像头的访问权限。
分页: 11/361 第一页 上页 6 7 8 9 10 11 12 13 14 15 下页 最后页 [ 显示模式: 摘要 | 列表 ]

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐