【PHP】下らねぇ質問はID出して書き込みやがれ 124
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2012/11/20(火) 18:02:45.99ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 123
http://kohada.2ch.net/test/read.cgi/php/1348583995/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
0539533
2012/12/19(水) 11:32:38.88ID:y/s/8Rtw申し訳ありません、バックアップは上書きの直前にwindowsXPのローカルに保存しました。
先ほど見つけたエラーログに以下のように記述がありました
(2)No such file or directory: exec of '/var/www/cgi-bin/cginame.cgi' failed, referer: https://~~/cgi-bin/menu.cgi
cgiの一行目にperlの場所が指定されていましたが、問題無さそうでした。
0540nobodyさん
2012/12/19(水) 11:37:17.94ID:???Windowsの改行コードがCRLFで、サーバが何だか分からんけど755って言ってるから
おそらくUNIXかLinux系だと仮定して、改行コードがLF
1行目の#!/usr/bin/perl が
#!/usr/bin/perlLF ならいいけど
#!/usr/bin/perlCRLF だと、
/usr/bin/perlCRなんてコマンドは無いって怒られる。
ということでやっぱり改行コードだと思うけど。
転送し直してもダメなら
1行目
#!/usr/bin/perl --
とかにしてみ?
0541nobodyさん
2012/12/19(水) 11:38:25.32ID:???0542533
2012/12/19(水) 11:40:48.88ID:y/s/8Rtwありがとうございます。
アスキーモードで上げたファイルをバイナリモードで落としてみました。
どのように確かめればよろしいのでしょうか?
37785byte>up>39180byte>down>39180byte とサイズが変わりました…
0543533
2012/12/19(水) 11:47:40.43ID:y/s/8Rtw1行目 #!/usr/bin/perl -- にしたら直りました!
本当にありがとうございました…
>>541
ファイルかディレクトリがないよ、というニュアンスは分かるのですが
どこを言っているのかわからず質問してしまいました。失礼致しました。
皆様こんな質問に答えてくださって本当にありがとうございました。
0544nobodyさん
2012/12/19(水) 11:50:32.44ID:???0545nobodyさん
2012/12/19(水) 11:54:38.38ID:XMsmfmT0pingの質問した俺は冷たくあしらわれたっていうのによ
0546nobodyさん
2012/12/19(水) 12:03:16.99ID:???0547nobodyさん
2012/12/19(水) 12:09:03.89ID:???0548nobodyさん
2012/12/19(水) 12:18:37.92ID:???XML_RPC.phpがあるのに自作したいくらいの勉強家なんだから、
公式の仕様書から実装するくらいの勢いがあって当たり前なんじゃないかな。
0549nobodyさん
2012/12/19(水) 12:21:38.40ID:XMsmfmT0そんなのあったのかよ!
まあいいやもうすぐできそうだから無理ならそれ調べてみる
ありゃと
0550nobodyさん
2012/12/19(水) 12:25:48.44ID:???0551nobodyさん
2012/12/19(水) 16:00:56.43ID:qAL3Ngf1【ファイル1】
$a="あああ".$b."";
【ファイル2】
require_once 'ファイル2';
$b="いいい";
$c=$a;
echo $c;
ファイル2で
あああいいい
と表示させたいのですが『いいい』は表示されません。
globalとかつけてみたのですがダメでした。
アドバイスよろしくお願いします。
0552nobodyさん
2012/12/19(水) 16:17:04.67ID:???$b="いいい";
require_once 'ファイル2';
$c=$a;
echo $c;
0554nobodyさん
2012/12/19(水) 17:06:59.07ID:???それを受信するサーバ側のphpで$_SERVERのHTTP_HOSTやSERVER_NAMEを取得すると
そのユーザが指定してきた適当な名前になってしまいます。
その受信側のPHPスクリプトが自分がサーバなのかローカルなのかを判定するにはどうしたらいいでしょうか?
0556nobodyさん
2012/12/19(水) 17:22:45.50ID:???0557nobodyさん
2012/12/19(水) 17:29:44.53ID:???0558nobodyさん
2012/12/19(水) 17:30:45.43ID:???httpd下で動作してるかどうか?
0559nobodyさん
2012/12/19(水) 17:35:14.83ID:???SERVER_NAMEはApacheであればその設定通りで
ユーザ側で偽装はできないだろ
0560nobodyさん
2012/12/19(水) 17:38:59.14ID:???$header = array(
"User-Agent: test",
"Host: testhost",
"Content-Type: text/xml",
"Content-Length: ".strlen($data),
);
$context = array(
"http" => array(
"method" => "POST",
"header" => implode("\r\n", $header),
"content" => urlencode($data)
)
);
echo file_get_contents('receive.php', false, stream_context_create($context));
receive.phpには
echo $_SERVER['HTTP_HOST']
とだけ書きます。
この状態で、ブラウザでsend.phpにアクセスすると、ブラウザには「testhost」と表示されてしまいます。
0561nobodyさん
2012/12/19(水) 17:41:06.15ID:???ローカルのテスト環境とレンタルサーバ側の環境ではMySQLのユーザとパスワードが違うので
どちら側で実行されているかを調べる必要があるんです。
>>559
それがSERVER_NAMEにしても「testhost」とひょうじされてしまうんですよ
0562nobodyさん
2012/12/19(水) 17:43:39.87ID:???0563nobodyさん
2012/12/19(水) 17:53:19.28ID:???SERVER_NAMEは、リクエストがない場合のみ、apatch設定の値を返します。
嫌な仕様ですね
0564nobodyさん
2012/12/19(水) 17:58:44.05ID:???マジですか・・・
じゃあ>>562さんの言うようにこういう原始的な方法で判定するしかないのかな・・
めんどくせえ
ありがとうございました
0565nobodyさん
2012/12/19(水) 21:38:49.21ID:???0566nobodyさん
2012/12/19(水) 21:56:19.59ID:???すいません、最近耳が遠くなったようで何言ってるのか分からなかった
0567nobodyさん
2012/12/19(水) 22:27:47.79ID:???0568nobodyさん
2012/12/19(水) 23:15:09.29ID:???0569nobodyさん
2012/12/19(水) 23:20:50.00ID:???0570nobodyさん
2012/12/20(木) 11:17:02.65ID:???本番サーバにSetEnv APP_ENV PRODUCTIONとかやっとけばいいじゃん
$_SERVER['APP_ENV']をみりゃ本番サーバかどうか分かる
0571nobodyさん
2012/12/20(木) 11:21:37.42ID:YTGC1BLf変な文字が入っている場合は除去できるんですが、閉じタグや文法的におかしくてパースがうまくいかないことがあります。
XMLとして正しいかどうかを判別する関数があればご教示いただけないでしょうか。
0572nobodyさん
2012/12/20(木) 11:27:38.57ID:???0574nobodyさん
2012/12/20(木) 11:35:55.07ID:YTGC1BLf読み込むRSSが正しいこと前提なのでRSSがおかしいとエラー出てきます。
>>573
$rss = simplexml_load_string($contents, "SimpleXMLElement", LIBXML_NOCDATA);
で読むと、この時点でブラウザ上にWARNINGが表示されるので、それをどうにかしたいと思っています。
0575nobodyさん
2012/12/20(木) 11:57:48.99ID:???> XML データ内でエラーが見つかるたびに E_WARNING エラーメッセージが発生します。
>ヒント
>libxml_use_internal_errors() ですべての XML エラーを抑制し、 後から libxml_get_errors() で取得することもできます。
て書いてんじゃん
ぱっと見た感じSimpleXML以外にも
XMLパーサのxml_parseやXML Readerのopen→isValidでも出来そうだが
0576nobodyさん
2012/12/20(木) 13:27:02.40ID:???0577nobodyさん
2012/12/20(木) 13:47:37.36ID:B4406POjfunction test($x, $y='bbb', $z='ccc'){
echo $x, $y;
}
test('aaa', $z='zzz');
これだとaaazzzcccと出力されますが、期待通りaaabbbzzzと出力させるようにすることは可能でしょうか?
($yと$zを逆にする以外でお願いします。pythonで出来たのでphpでもする方法がないかと思って質問しました。)
class MyClass {
public function test(){
echo 'test';
}
}
function test(){
global $myclass;
$myclass->test();
}
$myclass = new MyClass();
test();
これは期待通り動きますが、$myclassを関数内で扱う時毎回このようにglobal宣言するのは
少し面倒な上、不格好になってしまいます。
これを防ぐにはどのように書けばいいのでしょうか?
どなたかアドバイスよろしくお願いします。
0578nobodyさん
2012/12/20(木) 14:20:35.90ID:???上:$zをechoしてないように見えるけどなんでcccが出力されんの?
下:インスタンスを引数で渡すなり関数内でnewすればいいだけでは?
0579nobodyさん
2012/12/20(木) 14:21:33.81ID:???現状のPHPには名前付き引数はありません
function test($a) {
$default = array('y' => 'bbb', 'z' => 'ccc');
$a = array_merge($default, $a);
echo $a['x'],$a['y'];
}
test(array('x' => 'aaa', 'z' => 'zzz'));
こうするとかかね?5.4のクロージャを使って名前付き引数を再現する方法があるとかないとか
例で示してるのがecho 'test';してるだけなので具体性に欠けてアドバイスになるか分からないけど、
class MyClass {
public static function test(){
echo 'test';
}
}
function test(){
MyClass::test();
}
test();
それか
class MyClass {
public function test(){
echo 'test';
}
}
function test($myclass){
$myclass->test();
}
test(new MyClass());
こうとか?
0580nobodyさん
2012/12/20(木) 14:23:03.79ID:???JaneStyleのプレビューだと効くのに!恥かいたわ・・・
0581nobodyさん
2012/12/20(木) 14:31:57.69ID:???0582nobodyさん
2012/12/20(木) 14:35:11.74ID:???0583nobodyさん
2012/12/20(木) 14:39:35.16ID:???0585nobodyさん
2012/12/20(木) 14:49:15.30ID:???| 1
| 2
| 10
0587nobodyさん
2012/12/20(木) 14:52:22.91ID:???調べてみたらそのようですね
セキュリティに問題があるから変更したっぽいですが、いったいどんな危険が潜んでたのか・・・
0588nobodyさん
2012/12/20(木) 14:54:32.78ID:???それがヒドいありさまに・・・
0589577
2012/12/20(木) 15:07:37.69ID:???すいません、上は投稿時に$zを誤って消してしまっていました。
下はそれも書かずに済む方法は無いかと思って質問しました。
>>579
こういうのを名前付き引数って言うのですね、知りませんでした。
使ってるphpのバージョンが5.4だったので
クロージャを使って再現する方法について調べてみようと思います。
下はMyClass::test()の方法で期待通り動きました。
MyClassについては具体性に欠けた質問ですみませんでした。
みなさんアドバイス有難うございました。
0591nobodyさん
2012/12/20(木) 16:44:53.08ID:???×:投稿フォームでコーディング
○:再現する最少のコードを作成→動確→貼り付け
ルール違反:ID出さない
0592nobodyさん
2012/12/20(木) 20:57:26.60ID:???0593577
2012/12/20(木) 20:58:21.76ID:???0594nobodyさん
2012/12/20(木) 21:00:49.21ID:???今日のニュースで見たけど、最近はK察から削除要請あったらすぐ削除するらしい
結局権力に従った
権力に従うってことは・・・分かるな?
0595nobodyさん
2012/12/20(木) 21:46:13.50ID:???0596nobodyさん
2012/12/20(木) 21:55:03.33ID:???普通の人間には関係ないことだし別に問題ない
0597nobodyさん
2012/12/21(金) 00:40:59.61ID:???質問スレ含めて、1日で5スレぐらいしか更新されないし
0598nobodyさん
2012/12/21(金) 09:30:58.98ID:???0599nobodyさん
2012/12/21(金) 14:46:28.58ID:???洗練されていない感じがカッコイイと思ってるんだろうな
特に随所にある楽屋受け的な箇所が
会社でオヤジギャグを聞かされている感じ
0600nobodyさん
2012/12/21(金) 19:01:05.59ID:4RPXLz0ZURLの置き換えができません。
$short = "短縮URL";
$origin = "元のURL";
$text = "短縮URL";
$text = str_replace($short, $origin, $text);
このコードだと$textが"短縮URL"のままで置き換えが出来ていません。
良い方法を教えていただけないでしょうか。
0602nobodyさん
2012/12/21(金) 19:11:34.46ID:4RPXLz0Z回答ありがとうございます^^
twitterなどで短縮されたURLを元のURLにしたいと考えています。
>>echo $text;したら元のURLって文字列が出力されたぞ?
実際のURLでもうまくいきますか?
0604nobodyさん
2012/12/21(金) 19:42:34.16ID:???0605nobodyさん
2012/12/21(金) 19:43:41.30ID:???shortとtextは、同じ値が入るの?
それなら、>>601の言う通りになるはずだけど。
そもそも、短縮URLの仕組みは理解してるの?
0606nobodyさん
2012/12/21(金) 19:47:39.24ID:4RPXLz0Z実際のコードです。
$short_url、$original_url、$textには思い通りの値が入っていました。
$short_url = $tweet['entities']['urls']['0']['url'].'<br>';
$original_url = $tweet['entities']['urls']['0']['expanded_url'].'<br>';
$text = @$tweet["text"].'</div>';
$text = str_replace($short_url, $original_url, $text);
>>600のコードではURLを書いたところ、書き込むことができなかったので、文字にしました。
0607nobodyさん
2012/12/21(金) 19:53:31.47ID:4RPXLz0Zshortには短縮URL、
textには短縮URLを含んだツイートが入ります。
>>そもそも、短縮URLの仕組みは理解してるの?
短縮された後のURLともとのURLは分かっているので、
それを置き換えるだけで、しくみは分かってなくてもできると思っています、、、
0608nobodyさん
2012/12/21(金) 19:54:52.18ID:???0609nobodyさん
2012/12/21(金) 19:57:23.02ID:???質問サイトで、タイトルに「お願いします!」とか書いちゃう思考のヤツか。
もうちょい状況を説明しなさいよ。
何をしたいの?
Tw APIを利用したウェブアプリを作りたいんかな?
061071
2012/12/21(金) 20:01:27.73ID:???> PHPの組込み関数ってほとんど例外吐かないよね
例外を投げられると面倒なケースがあるからね。
あと、素人の作ったプログラムはやたら例外を投げるけど、デバックできなくて困る事が良くある。
例えばZend_Frameworkっていう、いかにも学生かオタクが作ったようなフレームワークがあるんだけど、あれはひどいね。
0611600
2012/12/21(金) 20:02:42.94ID:4RPXLz0Z$short_url = $tweet['entities']['urls']['0']['url'].'<br>';
$original_url = $tweet['entities']['urls']['0']['expanded_url'].'<br>';
の最後の<br>が余計でした。
おさわがせしてすみませんでした。
ありがとうございました。
0612nobodyさん
2012/12/22(土) 00:29:14.15ID:RsB7VEoj【PHPのバージョン】5.2.17
【質問内容】
PHPでMeCabを使いたいです。さくらにはデフォルトでMeCabが入っていますが、辞書の文字コードがeuc.jpです。
なので辞書のみ、自分のサーバーのホームディレクトリにインストールしutf-8に指定し使用したいです。
PHP側で使用する辞書を指定するにはどのように記述すれば良いですか?
0613nobodyさん
2012/12/22(土) 05:45:28.08ID:???0614nobodyさん
2012/12/22(土) 11:35:00.04ID:???>【OS名】さくらレンタルサーバ
そんなOSは無い
VPS以上のプランならcentOSだからデフォで内部文字コードUTF-8なんじゃね?(使ったこと無いけど)
辞書をutf-8にするよりも戻ってきた形態素をphp上でエンコードするほうがスマートだと思う
0615nobodyさん
2012/12/22(土) 11:56:57.77ID:RsB7VEojありがとうございます。
さくらのレンタルサーバのスタンダードなので、ルート権限はないです。
0616nobodyさん
2012/12/22(土) 12:09:56.19ID:b4fHgnvI$権限でいけるいける
マウントとかOSパッケージのインストールとかじゃなければ#権限じゃなくてもいける
ていうか デフォでmecab入ってるってほんと?公式だとビジネスプラン以上って書いてあるけど
【質問】ディレクトリどこよ?
0617nobodyさん
2012/12/22(土) 13:07:59.34ID:???先駆者見つけた
http://kane.meta-scheme.jp/article/37183101.html
0618nobodyさん
2012/12/22(土) 13:48:43.05ID:RsB7VEojmecabがあるディレクトリは
/usr/local/bin/mecab
です。
スタンダードでも使えるみたいです。
何回かsuで試したのですが、パーミッションディナイドと出てきます。
0619nobodyさん
2012/12/22(土) 13:50:46.16ID:???0620nobodyさん
2012/12/22(土) 13:58:20.44ID:RsB7VEojそちらの方は既に試しました。ブログ通りターミナル上で試す分には上手くいくのですが、
実際、サーバーにアップしたものをwebブラウザ上で見るとeuc.jpです。
0621nobodyさん
2012/12/22(土) 15:00:39.48ID:RsB7VEojを試したところ
インストールしたutf-8のものに変わっていました。
しかし、デフォルトのものでなくなってパスがあってないためか、
Webブラウザ上では
Class 'Mecab' not found
とエラーが出てしまいます…
0622nobodyさん
2012/12/22(土) 15:17:16.08ID:???0623nobodyさん
2012/12/22(土) 17:29:37.60ID:b4fHgnvIうぎゃああああ 入ってたああああ ちくしょおおおお
$comment=mb_convert_encoding ($comment, "EUC-JP" , "UTF-8");
してからメカブに渡して戻りをを
mb_convert_encoding ($ret, "UTF-8", "EUC-JP" );
でphpにもどしてやればいいんじゃね
0624nobodyさん
2012/12/22(土) 18:06:44.86ID:???0625nobodyさん
2012/12/22(土) 18:10:49.57ID:???0626nobodyさん
2012/12/22(土) 19:19:29.14ID:RsB7VEojそれだと変数の中身が
Array
という文字列だけになってしまいました。
0627nobodyさん
2012/12/22(土) 19:20:48.43ID:???0628202
2012/12/22(土) 19:42:46.10ID:8rmgur1Z0629nobodyさん
2012/12/22(土) 20:11:06.27ID:RsB7VEoj$result = mecab_split($str);
$result = mb_convert_encoding($result, 'utf-8', 'euc-jp');
print_r($result);
これだとWebブラウザに表示される文字列はArrayのみです。
3行目を消して試すと、euc-jpでちゃんと表示されます。
0630nobodyさん
2012/12/22(土) 20:34:47.07ID:???$resultは配列だと思うのでそんなもの渡しちゃいけません
array_mapとか使ってください
0631nobodyさん
2012/12/22(土) 21:27:34.17ID:???0632nobodyさん
2012/12/22(土) 21:40:19.85ID:???0633nobodyさん
2012/12/22(土) 22:33:05.11ID:b4fHgnvI$mecab = mecab_new();
$str_org = '私には夢があります。ベッカム夢の夢567 by 菊蔵下さいabcマートです。5本指。ABCマート。ABCマートベです。123';
$str=htmlspecialchars($_GET['comment'], ENT_QUOTES);
$noun_array = array();//名詞を格納する配列
$str2mecab=mb_convert_encoding ($str, "EUC-JP" , "UTF-8");
if ($node = mecab_sparse_tonode($mecab, $str2mecab)){
while ($node){
$node_array = mecab_node_toarray($node);
//char_typeが2、5、7の単語を抽出
if($node_array["char_type"] == "2" || $node_array["char_type"] == "5" || $node_array["char_type"] == "7"){
array_push($noun_array, $node_array["surface"]);
}
$node = mecab_node_next($node);
}}
$utf8_array=array();
foreach($noun_array as $value){
$value_utf8=mb_convert_encoding ($value, "UTF-8", "EUC-JP" );
array_push($utf8_array, $value_utf8);
}unset($value);
$str2php = implode("<br />\n",$utf8_array);
echo <<<EOT
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
<body>
$str2php<hr />
<form action="" method="get"><textarea name="comment" cols="50" rows="10">$str_org</textarea><br />
<input type="submit" value="Analysis" class="sbtn" /></form></body></html>
EOT;
mecab_destroy($mecab);
?>
0634nobodyさん
2012/12/23(日) 10:57:42.25ID:???0636nobodyさん
2012/12/24(月) 10:10:36.87ID:???現在ec-cubeで運用中のサイトのリニューアルを行なっています。
運用中のサイトに影響が出にくいよう、
開発用のサーバとは完全に分離の上、
更新分のSQLを用意する形で移行したいのですが、
その方法で悩んでいます。
PHPのソースだけならsvnなりgitなりの差分更新でおしまいなんですが、
DBの部分はそれが効かないので、
うまいことSQLで開発環境の開始前、終了時の差分をとって
一発ドゴーンでおしまいにしたいのですが。
(手作業で無理やりマージすると、今度はsvnでバッティングの嵐に…)
このあたり検索したらmysql structure compareなるものを見つけましたが、
これはテーブル定義の差分は取れましたが
中身の差分まではとってくれませんでした。
なにかよい方法がありましたらアドバイス頂けないでしょうか?
0637nobodyさん
2012/12/24(月) 10:21:32.17ID:???0638nobodyさん
2012/12/24(月) 12:16:43.67ID:???■ このスレッドは過去ログ倉庫に格納されています