在阿里云上租了一台主机,其操作系统是Windows Server Standard 2008,希望在其上运行一个Laravel服务。一开始我安装了WAMPServer包,但是运行报错:
无法定位程序输入点TryAcquireSRWlockExclusive于动态链接库kernel32.dll
这是由于MySql5.6以上的版本需要"TryAcquireSRWlockExclusive",而这个特性是在win7之后才引入的,所以Windows Server没有这个,但是使用低版本的WAMP包不支持PHP7.0,而这是Laravel5.5所需要的。于是集成开发包的缺点体现了出来,索性自己重头开始搭建所需要的环境吧。
因为apache、PHP的编译都是通过VC完成的,apache2.4有vc14、vc11两种编译版本,而PHP7.0只有vc14,为了兼容与统一,我选择安装vc14,在微软官网下载vc14运行库,也就是vc++2015。选择中文,服务器对应的32位X86版本。
将运行库在服务器上一路点击下一步完成安装。
在apache官网下载apche2.4 对应vc14版本,服务器对应的X86版本,点击下载压缩包httpd-2.4.33-o102n-x86-vc14.zip,解压到你的apache目录。
解压后得到apche24文件夹,修改其中apache配置文件apche24\conf\httpd.conf文件:
(1) 修改apache根目录:Define ServerRoot"c:/Apache24" => Define ServerRoot "C:\Web\Apache24"
(2) 开放80端口:ServerNamewww.example.com:80将前面的#去掉
(3) 修改默认入口文件:
DirectoryIndexindex.html
改为=>
DirectoryIndex index.php index.htm index.html
(4)
AllowOverride None
Options None
Require all granted
改为=>
AllowOverride None
Options None
Require all granted
注册apache服务,在apache\bin目录下运行命令行,输入:httpd.exe -k install -n apache,之后apache会显示安装成功的提示,最后一行为Errors reported here must be corrected before the service can be started:,意思是下面的错误必须修正才能启动apache,如果没有,则可以启动apache了
点击Apache24\bin文件夹下的ApacheMonitor.exe来打开apache控制器,启动apache,在浏览器输入localhost可以看到如下界面:
在PHP官网下载php7.0 vc14 线程安全版本VC14 x86 Thread Safe。简单而言Windows下apache选择PHP线程安全版本,解压文件到你的PHP文件夹夹。
修改apache目录下的conf\httpd.conf文件,告诉apache加载PHP模块,在文件最后添加如下:
#php7
LoadModule php7_module C:/Web/PHP/php7/php7apache2_4.dll
PHPIniDir "C:/Web/PHP/php7/"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
其中php7_module为PHP文件夹下的php7apache2_4.dll 路径,phpinidir为PHP的安装路径。
配置PHP:在php目录下复制一份php.ini-development后重命名为php.ini,在其中修改如下:
修改扩展文件路径:
; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
extension_dir = "C:\Web\PHP\php7\ext"
打开所需要的PHP扩展
; Windows Extensions
; Note that ODBC support is built in, so no dll is needed for it.
; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5+)
; extension folders as well as the separate PECL DLL download (PHP 5+).
; Be sure to appropriately set the extension_dir directive.
;
extension=php_bz2.dll
extension=php_curl.dll
extension=php_fileinfo.dll
extension=php_ftp.dll
extension=php_gd2.dll
extension=php_gettext.dll
;extension=php_gmp.dll
;extension=php_intl.dll
;extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_ldap.dll
extension=php_mbstring.dll
extension=php_exif.dll ; Must be after mbstring as it depends on it
extension=php_mysqli.dll
;extension=php_oci8_12c.dll ; Use with Oracle Database 12c Instant Client
extension=php_openssl.dll
;extension=php_pdo_firebird.dll
extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_shmop.dll
laravel所需的扩展如下,因此需要打开:
在apach的Apache24\htdocs路径下创建文件test.php,文件内容:
phpinfo();
?>
在浏览器localhost:test.php可以看到页面如下表示安装成功:
网上找到MySQL5.6免安装的压缩包解压到C:\Web\MySql目录下,打开其目录下的my.ini文件,修改mysql与data路径:
# These are commonly set, remove the # and set as required.
basedir = C:\Web\MySql
datadir = C:\Web\MySql\data
取消如下句子的注释:
log_bin
注册服务:在mysql\bin目录下启动命令行输入mysqld -install
启动服务:接着输入net start mysql
我在启动时报错系统错误 1067,进程意外终止,于是我输入
mysqladmin -u root -p shutdown
再此启动net start mysql就没有这个错误提示了
修改root密码:
mysql> update user set password=password('password') where user='root';
mysql> flush privileges;
我将laravel5.5的文件包粘贴到apache的根目录htdocs下,访问public可以访问,但是访问其他路由时就会报错404 not found,除了开启之前laravel所需要的PHP模块之外还需要:
在apache \conf开启rewrite模块:LoadModule rewrite_module modules/mod_rewrite.so,
在conf文件中找到directory 把AllowOverride None 改成 AllowOverride All
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
复制php安装目录中的: libeay32.dll、ssleay32.dll至apache\bin目录
至此在Windows Server 2008上运行了Apache+PHP+Mysql的Laravel服务