首页 文章

从EC2实例移动到GCE实例后,php程序出错=无法访问文件:/ var / www / html /

提问于
浏览
0

移动了一个php / xml程序,该程序提交在线表单,将结果的电子邮件作为pdf附件发送给指定的收件人 .

系统在Amazon EC2(以及其他基本主机帐户)上运行良好,但在Google的GCE上中断 .

已移至Google Compute Engine GCE,无法弄清或错过此错误 .

没有发送电子邮件 . 它使得页面头部的php错误感谢页面:

无法访问文件:/var/www/html/temp/98r34prqp98ipjqoipe9898jo.pdf

所有路径和配置路径都是正确的,并且已经被查看了一百万次 .

所有用户(包括apache,root,我的用户)都已分配到在/ var / www中具有-R 775权限的组www .

/ temp已经777'd .

也:

sudo su

chown -R root:www / var / www

chmod 2775 / var / www

find / var / www -type d -exec chmod 2775 {}

find / var / www -type f -exec chmod 0664 {}

还尝试了以上我向每个用户展示的内容然后进行了测试,root:www,apache:www,myuser:www ...没有运气 .

完成的其他事情:安装apache,php,postfix,php-gd,php-pear,mod_ssl(不使用数据库)

Apache已经重启了一百万次 .

httpd_can_sendmail - >上

编辑到php.ini

使用PHPMailer Lite版本5.1

error_log显示没有错误,除了有关时区的警告:[error] [client 0x0x0x0x] PHP警告:date():依赖系统的时区设置是不安全的 . 您需要使用date.timezone设置或date_default_timezone_set()函数 . .... blaa,blaaa ....

可能性/差异:

  • EC2有php版本5.3.28,GCE有php版本5.3.3

  • EC2与GCE的不同java版本?系统使用.jar文件 .

  • 有一些httpd.conf虚拟主机配置在GCE上应该是不同的? (我已经粘贴了下面的一些httpd.conf信息 .

  • 有些缺少模块?这是模块... [PHP模块] bz2日历核心ctype卷曲日期dom ereg exif fileinfo过滤器ftp gd gettext gmp hash iconv json libxml openssl pcntl pcre Phar readline反射会话shmop SimpleXML套接字SPL标准标记符wddx xml xmlreader xmlwriter xsl zip zlib

这里有一些httpd.conf信息:系统在htaccess文件中有一个强制ssl . 端口443在防火墙中启用,80也通过Google Developer Console启用

<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>



<VirtualHost *:80>
DocumentRoot /var/www/html/
ServerName www.MYDOMAIN.com
</VirtualHost>


NameVirtualHost *:443
<VirtualHost *:443>
DocumentRoot /var/www/html/
ServerName www.MYDOMAIN.com
ServerAlias MYDOMAIN.com www.MYDOMAIN.com
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile /var/www/SSL/MYDOMAIN.cert
SSLCertificateKeyFile /var/www/SSL/MYDOMAIN.key
SSLCertificateChainFile /var/www/SSL/MYDOMAIN_intermediate.cert
SetEnvIf User-Agent “.*MSIE.*” nokeepalive ssl-unclean-shutdown
</VirtualHost>

非常沮丧:(

1 回答

  • 0

    解决了!显然,在Google Compute Engine CentOS上,默认情况下,Apache不允许运行Java .

    我不得不跑:

    sudo setsebool httpd_execmem=1
    sudo service httpd restart
    

    答对了!

    其他附注:确保您运行的是所需的java版本 . 通过 java -version 找到java版本 . 我有1.5运行,不得不运行:

    yum search java
    

    获取1.6版本的列表:

    sudo yum install java-1.6.0-openjdk.x86_64
    

    总之,有三个要点:

    • 您必须允许postfix / httpd发送邮件: setsebool -P httpd_can_sendmail 1

    • 您必须使用sendgrid从GCE实例发送邮件 . Google Compute Engine实例不允许发送电子邮件:(有关如何进行设置,请参阅instructions .

    • 确保你安装了正确版本的Java,因为如果你只是 yum install java ,你可能会像我一样;当你需要1.6时安装1.5 . PLUS,但默认情况下,GCE不允许Apache使用java . 所以你需要使用 setsebool httpd_execmem=1 配置它 .

    希望这有助于某人 .

相关问题