可能的原因:php对mssql的ntext类型的支持问题。
弄了半天,明明可以链接到数据库,却不能读取的数据。
查找原因,原来是php读取mssql的 ntext字段反回值为空的,建议把ntext字段改成text。
如果表中没有ntext字段,可以用以下代码:
<?php
// Connect to MSSQL
$link = mssql_connect('KALLESPC\SQLEXPRESS', 'sa', 'phpfi');
if(!$link !mssql_select_db('php', $link))
{
die('Unable to connect or select database!');
}
// Do a simple query, select the version of
// MSSQL and print it.
$version = mssql_query('SELECT @@VERSION');
$row = mssql_fetch_array($version);
echo $row[0];
// Clean up
mssql_free_result($version);
?>
如果表中有ntext军字段,且不方便将字段类型修改为text字段, 可以按如下方法处理:
1.修改 php.ini
打开php.ini
找到:
;mssql.textlimit = 4096
改为
mssql.textlimit = 2147483647
找到:
;mssql.textsize = 4096
改为
mssql.textsize = 2147483647
2.可以使用修改字段,由于sql server中,ntext和nvarchar字段是用unicode编码存储内容的,因此php通过mssql扩展读取带ntext和nvarchar类型字段的时候会抱错。
如果 title 字段类型为 nvarchar,content 字段类型为 ntext ,那么下面的sql语句会报错:
错的:
select title,content from article
正确的:
select convert(varchar(255),title) as title, convert(text,content) as content from article
3.如果是虚拟主机,可以使用adodb 组件来读取。如果主机不支持,那么求神保佑吧。
include("adodb/adodb.inc.php"); //包含adodb类库文件
$conn=NewADOConnection('odbc_mssql'); //连接SQL Server数据库
$conn->Connect("Driver={SQL Server};Server=localhost;Database=mydb;",'username','password');
?>
is_file() 函数检查指定的文件名是否是正常的文件。
is_file — Tells whether the filename is a regular file
用法:
bool is_file ( string $filename ) $file 为必选参数
如果文件存在且为正常的文件则返回 TRUE。
先来看一个实例一:
var_dump(is_file('a_file.txt')) . "\n";
var_dump(is_file('/usr/bin/')) . "\n";
?>
上例将输出:
bool(true)
bool(false)
实例二:
function isfile($file){
return preg_match('/^[^.^:^?^-][^:^?]*.(?i)' . getexts() . '$/',$file);
//first character cannot be . : ? - subsequent characters can't be a : ?
//then a . character and must end with one of your extentions
//getexts() can be replaced with your extentions pattern
}
function getexts(){
//list acceptable file extensions here
return '(app|avi|doc|docx|exe|ico|mid|midi|mov|mp3|
mpg|mpeg|pdf|psd|qt|ra|ram|rm|rtf|txt|wav|word|xls)';
}
echo isfile('/Users/YourUserName/Sites/index.html');
?>
实例三:
function deletefolder($path)
{
if ($handle=opendir($path))
{
while (false!==($file=readdir($handle)))
{
if ($file<>"." AND $file<>"..")
{
if (is_file($path.'/'.$file))
{
@unlink($path.'/'.$file);
}
if (is_dir($path.'/'.$file))
{
deletefolder($path.'/'.$file);
@rmdir($path.'/'.$file);
}
}
}
}
}
?>
此函数将删除所有文件与文件夹。
1、目录inc有以下内容:
子目录 0
子目录 a
footer.html
header.html
login_function.inc.php
mysqli_connect.php
style.css
2、现在要实现遍历inc目录,并只显示文件,不显示目录0和a。
$dir = "$dir/inc/";
$d = opendir($dir);
while(false !==($f=readdir($d)))
{
if(is_file($f)){
echo " <h2>$f </h2>";
}else{
echo " <h2>是目录$f </h2>";
}
}
closedir($d);
结果却只显示了“footer.html”是文件,其它都变成目录了:
是目录.
是目录..
是目录a
footer.html
是目录header.html
是目录login_function.inc.php
是目录mysqli_connect.php
是目录style.css
这是由于不能在is_file和is_dir中直接使用“$f”,这样会被PHP当作是根目录下的该文件,而在我的根目录下有footer.html这个文件,所以会正确显示这个文件。其它则不行。代码改成:
要正确显示,需要改造代码:
{
if(is_file("$dir/$f")){
echo "<h2>$f</h2>";
}else{
echo "<h2>是目录$f</h2>";
}
}
closedir($d);