我想請問一下公司有一個PHP的網頁因為OS要升級至CentOS8
所以我把網頁資料轉到新server但測試網頁時會出現程式碼
我想請問是那裡沒設到,謝謝
舊OS centOS 5
Apache/2.2.8 (CentOS)
新OS centOS 8
Apache2.4
圖1是舊OS的,圖2是新OS的.
一般這就是無法解讀程式碼的情況。
會無法解讀的情況有如下的原因
1.未安裝可解析php程式碼的對應應用。
2.未設定mini-type對應指向php運行解析的程式。或是model對應錯誤。不過後者理論上是會報錯
3.程式碼非用php副檔名。
4.使用了短應用語法如「」。但php.ini並未啟用短應用。
可以先放一支php程式。上面只有
<?php phpinfo();
先試試是否可以正常跑php。並透出php的info資訊出來。
可以透出php的info資訊
程式碼開頭原本是<?改成<?php網頁會變空白
程式碼內容如下
"<?
include("calendar.php");
class MyCalendar extends Calendar
{
function getCalendarLink($month, $year)
{
$s = getenv('SCRIPT_NAME');
// Redisplay the current page, but with some parameters
// to set the new month and year
return "$s?month=$month&year=$year";
}
function getDateLink($day, $month, $year)
{
$link = "";
// Only link the first day of every month
include("setup.php");
$conn=mysql_connect( $mysql_server_name, $mysql_username, $mysql_password);
$sql="SELECT * FROM `semester`";
$db=mysql_select_db($mysql_database,$conn);
mysql_query('SET NAMES utf8');
$result=mysql_query($sql,$conn);
while($row=mysql_fetch_row($result))
{
$temp1[0]=substr($row[1],0,4);
$temp2[0]=substr($row[2],0,4);
if($temp1[0]==$year || $temp2[0]==$year)
{
$temp1[1]=substr($row[1],5,2);
$temp1[2]=substr($row[1],8,2);
$temp2[1]=substr($row[2],5,2);
$temp2[2]=substr($row[2],8,2);
if(mktime(0,0,0,$month,$day,$year)>=mktime(0,0,0,$temp1[1],$temp1[2],$temp1[0]) && mktime(0,0,0,$month,$day,$year)<=mktime(0,0,0,$temp2[1],$temp2[2],$temp2[0]))
{
if($month<10)$month="0".$month;
if($day<10)$day="0".$day;
$date=$year."-".$month."-".$day;
$link = "classinfo.php?date=$date";
}
}
}
return $link;
}
}
$d = getdate(time());
//add by alvin 20110105 for correct date select.
$year = $_GET['year'];
$month = $_GET['month'];
//add by alvin 20110105 for correct date select.
if ($month == "")
{
$month = $d["mon"];
}
if ($year == "")
{
$year = $d["year"];
}
$cal = new MyCalendar;
echo $cal->getYearView($year);
?>
跑出PHPINFO的資訊。代表PHP可以正常運行。
但你將其改成<?PHP就會報錯。(其實空白頁因該就是有錯誤了)
可能是有些函數沒載入或是不支援。
看到你還有用 mysql_connect 系列的函式。
推測你的PHP版本是7版,不支援MYSQL相關函數而造成問題。
可試著降版到5.6試試,並查看你的PHPINFO是否有對應的MYSQL庫的載入。5版的正常會預先載入。
7板的已經不會自動載入了。但會有PDO的應用。
PHP5 改到PHP7 真是一個痛苦的經驗
原先使用的 mysql_connect 已經不支援, 所有mysql 的函數都要改成 mysqli
如果不打算改程式碼, 也可以把伺服器的PHP版本降到5.5以下
還沒做到Mysql的部份,單是月歷跑不出來就快玩死我了.
先前廠商是用1.4版的,網路上找到的3.0版也不能用.
先舊版的錯誤一樣
https://github.com/getk2/k2-next/blob/master/modules/mod_k2_tools/includes/calendar.php
阿峰
其實,php7是連mysqli也不直接支援喔。
因該說是所有跟mysql有關的函式都不會預先掛載套件了。
全統一用pdo取代了。
不過還是可以手動掛載mysqli套件就是了。記得mysql套件好像是不支援了。沒試過,畢竟我都用pdo了。
有可能php fcgi 或 fpm沒有載入,有時您在改的php.ini並不是目前正在跑的php所用的。
如果是舊版php所用到的函式,可能要在CentOS8裝舊版php
如果CentOS8要跑其他版本PHP可以參考看看這篇文章。
https://www.cadch.com/modules/news/article.php?storyid=227