お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2008-07-23 15:50:13

michi_gogo
メンバ
登録日: 2007-10-25

ubuntu6.06 serverのphpに関する質問です

ubuntu6.06 serverのphpのバージョンは、
私の場合、5.1.2なのですが、
これを5.2.5にアップグレードするにはどうすればいいのでしょうか?
参考になるURLでも結構ですので、教えてくださいませ。

オフライン

 

#2 2008-07-23 22:21:02

mizuno
管理者
From: Kyoto
登録日: 2007-02-28

Re: ubuntu6.06 serverのphpに関する質問です

基本的にはアップグレード出来ません。一度リリースされたディストリビューションは、新バージョンが出たからといってそのバージョンがリポジトリに登録されることはありません。最新 LTS の Hardy でも 5.2.4 ですので、ご希望の 5.2.5 は自分でコンパイルして導入するしかないのではないでしょうか?
ちなみに素朴な疑問なのですが、なぜ最新の 5.2.6 ではなく 5.2.5 なのでしょう? 現在アルファ版の Intrepid には 5.2.6 のパッケージが存在するようです。

オフライン

 

#3 2008-07-24 00:43:16

michi_gogo
メンバ
登録日: 2007-10-25

Re: ubuntu6.06 serverのphpに関する質問です

mizunoさん、ありがとうございます。
アップグレードできないんですね。

>なぜ最新の 5.2.6 ではなく 5.2.5 なのでしょう?

私の場合かなり初心者でして、
実は、垂直タブを区切り文字に使ったテキストを、
なかなかphpで処理できず、
いろいろホームページで調べたところ

http://php.benscom.com/manual/ja/language.types.string.php

ここにある、

\v 垂直タブ (VT またはアスキーの 0x0B (11)) (PHP 5.2.5 以降)

という記述にぶち当たりました。
ああ、5.2.5にすれば、できるのかなーというのが、
この投稿の単純な動機です。
ただ、次のURLにあるように、

http://www.phppro.jp/qa/1146

このページの方のように、

$fields6 = ereg_replace("\x0b","\n",$fields6);

という関数で、できている人もいるので、
もしかしたら、
私のubuntuの言語関係の基本的な設定がまずいのでしょうか??
ちなみに、私の環境のphpでは、
いろいろコード書いて実験した結果、
たぶん文字として認識していないようで、
"\x0b"?何それ、という感じなのです…


何か良い知恵がありましたら、教えて下さい。

オフライン

 

#4 2008-07-24 07:29:05

HiroKws
メンバ
From: Tokyo, Japan
登録日: 2007-05-31

Re: ubuntu6.06 serverのphpに関する質問です

 Hi!

 phpは知りませんが検索して、簡単なテストプログラムを作成しました。

コード:

<?php
 $fields123 = "VT handling is [[[\x0b]]]!!!";
 $fields123 = ereg_replace("\x0b",'success',$fields123);
 print($fields123);
?>

 実行して、"VT handling is [[[success]]]!!!"と出力されれば、内部でvtは扱われていて、ereg_replaceもvtを正しく処理しているということです。
 これが成功したら、原因は別の処に在るのかもしれません。
 ちなみに動作させたのは、8.04 デスクトップ版でリポからインストールした、5.2.4です。

 文字として認識されていないということはまずありえないと思いますが、そう判断された根拠を書き込まないと、識者の方も判断がつかず、返答しづらいとおもいます。

最後の編集者: HiroKws (2008-07-24 08:58:16)

オフライン

 

#5 2008-07-24 07:52:19

HiroKws
メンバ
From: Tokyo, Japan
登録日: 2007-05-31

Re: ubuntu6.06 serverのphpに関する質問です

 初心者だと言われているので、念のため。

 ’しんぐるこーてーしょん’と”だぶるこーてーしょん”が違っていないか確認してください。ダブルコーテーションで囲む必要があるようです。

  /スラッシュと\バックスラッシュを間違えていないか、確認してください。バックスラッシュは環境により、円記号で表示されます。

 /x0bの0は数字の0です。英小文字のoや大文字のO、漢字の0、O、oでもありません。

 念のため、念のため。

オフライン

 

#6 2008-07-24 17:29:21

michi_gogo
メンバ
登録日: 2007-10-25

Re: ubuntu6.06 serverのphpに関する質問です

HiroKws さん、おはようございます!
親切レスありがとうございます。
返信が遅れたのは、
私の一日のスタートダッシュが遅いためです…
決して、文化人を気取っているとかそういうことでなく、
怠け者のせいかもしれません><

で、さっそく、教えていただいたテスト行ってみたところ、
なんと、successが表示される…
何がおかしいのかな@@;

そこで、現物のテキスト中にある垂直タブを、
コピーして次のようにしたら
うまく処理できました。
コード載せます。
ちなみに、csvのようなテキストで、
区切り文字が、垂直タブなのです。


※呼び出される関数
http://www.phppro.jp/qa/371
ココにあるfgetcsv_regをいじったものです。
まだ私自身、このコードの意味がよくわかっていませんが、
使えるということは分かっている、そんな便利関数です…

function fgetcsv_vt ( &$handle, $length = null, $d = ',', $e = '"' )
{
$d = preg_quote($d);
$e = preg_quote($e);
$_line = "";
while ($eof != true)
{
 $_line .= ( empty( $length ) ? fgets( $handle ) : fgets( $handle,  $length ) );
 $itemcnt = preg_match_all('/'.$e.'/', $_line, $dummy);
 if ($itemcnt % 2 == 0)
 {
   $eof = true;
 }
}


*****ここの、最初の引数がコピーした部分です*****
$_line2 = ereg_replace( "", ",", $_line );


$_csv_line = preg_replace( '/(?:\\r\\n|[\\r\\n])?$/', $d, $_line2 );
$_csv_pattern = '/('.$e.'[^'.$e.']*(?:'.$e.$e.'[^'.$e.']*)*'.$e.'|[^'.$d.']*)'.$d.'/';
preg_match_all( $_csv_pattern, $_csv_line, $_csv_matches );
$_csv_data = $_csv_matches[1];
for( $_csv_i = 0; $_csv_i < count( $_csv_data ); $_csv_i++ )
{
 $_csv_data[$_csv_i] = preg_replace( '/^'.$e.'(.*)'.$e.'$/s','$1', $_csv_data[$_csv_i] );
 $_csv_data[$_csv_i] = str_replace( $e.$e, $e, $_csv_data[$_csv_i] );
}
return empty( $_line2 ) ? false : $_csv_data;
}


※呼び出す前の部分(抜粋)
<?
mb_internal_encoding( 'UTF-8' );

中間略

$source_file = $_FILES["file"]["tmp_name"];
$filename = $_FILES['file']['name'];
$row_data = 0;
$handle = fopen( $source_file, "r" );

while ( ( $data = fgetcsv_vt( $handle, 2000 ) ) !== FALSE )
{
 mb_convert_variables( 'UTF-8', 'SJIS-WIN', $data );
以下略
?>

最初、
$_line2 = ereg_replace( "", ",", $_line );
の部分を、
$_line2 = ereg_replace( "\x0b", ",", $_line );
としていたのですが、
全然置き換えてくれなくて
このスレの質問となりました。
結果、オーライで良しとするか迷うところですが、
なんかスマートじゃないな…

とりあえず、
HiroKws さん、mizuno さん
お二人ともありがとうございました。

オフライン

 

#7 2008-07-24 18:16:56

HiroKws
メンバ
From: Tokyo, Japan
登録日: 2007-05-31

Re: ubuntu6.06 serverのphpに関する質問です

 Hiho!

コード:

<?
mb_internal_encoding( 'UTF-8' );

 phpのことは全然分かりませんが、mb_internal_encodingという関数の名前がひっかかりまして、googleしたら、説明の一文に「encoding は、HTTP 入力文字エンコーディング変換、 HTTP 出力文字エンコーディング変換および mbstring モジュールの文字列関数においてデフォルトの文字エンコーディングとして使用されます。」とありました。

 その説明のページの左側に、mb_ereg_replaceと言う関数があります。

 mb_intenal_encodingでなにやら内部の文字列の取り扱いをutf-8のマルチバイトにしているようなので、ereg_replaceより、mb_ereg_replaceを使用する方が良いのでは?名前からすると。

 でも、これ以上はオフトピックになるので、おしまいです。あとは、phpのフォーラムで聞いてくださいね。


 

最後の編集者: HiroKws (2008-07-24 18:17:24)

オフライン

 

#8 2008-07-24 21:14:06

michi_gogo
メンバ
登録日: 2007-10-25

Re: ubuntu6.06 serverのphpに関する質問です

HiroKws さん、たびたび、ありがとうございます。
解決しました!
なので、オフトピックですが報告だけしておきます。

$_line2 = ereg_replace( "\x08", ",", $_line );

としたらできました^^;
なんでやねん、と個人的に突っ込み入れときますが、
HiroKws さんのアドバイスのおかげです!
先入観捨てたらできました。
本当に、ありがとうございました。

Plus
Ubuntuはすばらしい!
と褒め称えさせていただきます!
ty forum

最後の編集者: michi_gogo (2008-07-24 21:17:07)

オフライン

 

#9 2008-07-24 22:37:01

HiroKws
メンバ
From: Tokyo, Japan
登録日: 2007-05-31

Re: ubuntu6.06 serverのphpに関する質問です

x08....バックスペースかい:lol:

オフライン

 

Board footer

Powered by FluxBB