PHP質問・雑談スレ6【初心者お断り(ROM歓迎)】
■ このスレッドは過去ログ倉庫に格納されています
PHPに関する質問や雑談をするスレです。 初心者お断り(ROM歓迎)と書いてますが、初心者用のスレが用意されているからで、 難しい質問や話題をしなければいけないわけではありません。 PHPマニュアルの読み方を概ね理解していて、関数リファレンスが正しく読める方用のスレです。 PHP未導入の方や、手取り足取りが必要な初心者の方はム板のくだスレへどうぞ。 https://mevius.5ch.net/tech/ (【PHP】で板内を検索) 前スレ https://medaka.5ch.net/test/read.cgi/php/1538639036/ その他リンク ・PHPマニュアル https://secure.php.net/manual/ja/index.php ・コードテスト・貼り付け用 https://ideone.com/ ・プログラミングのお題スレ (求PHPer参戦) https://mevius.5ch.net/tech/ (お題スレで板内を検索) このスレで扱う話題 ・PHPのコード,設定や設定値に関する質問 ・常識的範囲内でのコードレビュー依頼・改良相談 ・PECL,PEARに関する質問 ・PHP新機能やPHP関連トレンドの話題 (FWや非公式ライブラリの話題や特徴比較は良いが使い方から先の話題は専スレへ) ・PHPのバグ発見報告・公式に報告する前の検証依頼 このスレで扱わない話題 ・直接関係ない○○特有の質問(専スレへ) (HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等) ・PHPの改造 // ワンクッションページのURL $cookie='https://drive.google.com/uc?export=download& ;id=1wyXHX_xDh4EntuIG7y6jpHiPZT99OBn26A'; //クッキー取得のためのアクセス $ch=curl_init();//初期化 curl_setopt($ch,CURLOPT_URL,$cookie);//cookieを取りに行く curl_setopt($ch,CURLOPT_HEADER,FALSE);//httpヘッダ情報は表示しない curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);//データをそのまま出力 curl_setopt($ch,CURLOPT_COOKIEJAR,'cookie.txt');//$cookieから取得した情報を保存するファイル名 curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE);//Locationヘッダの内容をたどっていく $html = curl_exec($ch); curl_close($ch);//いったん終了 // confirm=**** のうち末尾4文字を$match["name"]に抽出 preg_match('/.*confirm\=(?P<name>\w+)\&.*/', $html, $match); // 得られた"confirm=****"を使いダウンロードリンクを生成 $url='https://drive.google.com/uc?export=download& ;confirm=' . $match["name"] . '&id=1wyXHX_xDh4EntuIG7y6jpHiPZT99OBn26A'; // HTML5のvideoタグを生成して動画の埋め込み再生 echo '<html><body><video controls><source src="'; echo $url; echo '" type="video/webm"/></video></body></html>'; 'cookie.txt'にcookie情報が取得できたのは確認できたのですが 残念ながらこの方法では動画の再生にはいたりませんでした。 方針が間違ってたのでしょうか? 斜め読みしかしてないけど、閲覧側が google ドメインに対して cookie のセットができないんで、その方向性に解はないと思うよ。 >>90 > 閲覧側が google ドメインに対して cookie のセットができないんで、その方向性に解はないと思うよ。 閲覧側の問題ですか・・ PHP使ってGoogleから発行されたcookieを閲覧側に横流しすることって出来ますか? >>91 一応Googleドライブで動画の埋め込みコードを発行してたりするので(iframeを使ったコードですが) メディア配信を意識してないわけでは無いようです >>92 そのGoogleドライブが発行する埋め込みコードじゃダメなのか? >>94 「動画の埋め込み」機能で発行されるコードは再エンコードされた動画だったりします (たとえ最高の1080pを選んでも) 元動画が60pでうpしたのに埋め込み再生される動画は30pに落とされるとかざらにあります >>88 の方法はそれを回避して動画をオリジナルの画質で再生する方法なんですが 動画の容量が数十MBのものまでしか使えないのが問題でして・・・ >>93 CORS・・・初めて耳にしました ちょっと調べてみます PHPの力を使うなら、GoogleドライブからPHPサーバーに動画をキャッシュしてストリーミングしてしまえ http://demo.codesamplez.com/html5/video >>96 > PHPサーバーに動画をキャッシュしてストリーミングしてしまえ 無料レンタルサーバーなんですよね、 そんなことしたら怒られそうで・・・ 画像特化CDNのCloudinary最近動画配信機能強化してなかった? 無料枠で納まるか知らんが。 よくわからんが1個の動画容量が数MBでも問題ないだろ メタデータ作ってHLSで繋いで再生すればいいだけで PDOでのデータベース操作が上手くいかないので質問させてください mysql> SELECT number FROM testtable; +--------+ | number | +--------+ | 204 | | 226 | | 234 | | 246 | +--------+ 4 rows in set (0.00 sec) このようなnumberカラムを持つtesttableで、特定の値(仮に今回は3番目の234とします)より大きいnumberを持つレコードのみ+1するということが目的なのですが、 直接mysqlで以下のstatement: >UPDATE testtable SET number = number + 1 WHERE number > 234; を実行すると Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT number FROM testtable; +--------+ | number | +--------+ | 204 | | 226 | | 234 | | 247 | +--------+ となり、目的が達せられます しかし、これをaxiosでPOST requestしたphpの関数上で行うとおかしな結果になります ====== try { $connection = new PDO( 'mysql:host=' . $host . ';dbname=' . $dbname, $username, $password, $options ); $connection->exec( 'update testtable set number = number + 1 where number > 234' ); echo 'run only once.'; } catch ~~~~ ===== 上記がphp内のPDOで同じstatementを実行している部分で、 この実行の後に、numberカラムを確認すると mysql> select number from testtable; +--------+ | number | +--------+ | 204 | | 226 | | 234 | | 249 | +--------+ 4 rows in set (0.00 sec) このようになぜか + 2 されてしまいます exec内のstatementが意図せず2回実行しているのかと疑って、 $connection->exec( 'update testtable set number = number + 1 where number > 234' ); の [ number = number + 1 ] を [ number = number + 2 ] として変更すると + 4 されるので、恐らくその点については疑い通りなのですが、 一方でaxiosのresponseは、'run only once.'と期待通りになっていて echoの内容が重なっていたりはしないので、このブロック全体が2回実行されているわけでもないようです 結局何がどうなっての結果なのかさっぱり分かっていないという状態です 上記の挙動について、考え得る原因やなにか自分に落ち度があればその点ご指摘いただけますでしょうか 長々と質問してしまい申し訳ありませんが、どうぞよろしくお願いいたします たまにあるのが、ブラウザの拡張機能が悪さしているケース。 何故か、2回アクセスしてたりする。 アクセスログ見てみるといいよ。 POSTが二回発行されてたら、echoじゃわからないんじゃね? formのsubmitとajaxが2つ動いてるパターンIEでよくある。 遅くなってしまいすみません >>103 まさにこちらがどんピシャリでchromeでは上のような挙動になるのに、Edgeだとちゃんと動きました ですがchromeの何が悪さをしているかは謎のままなので、これからどのように特定すればいいのか少し調べてみます ありがとうございました >>104 axiosのresponseが2件重複しているかは最初に調べて、postの重複でないことは確認しておりました 指定したディレクトリ配下全ての拡張子jpegをjpgに書き換えるコード function jpeg2jpg($path) { $array = glob($path.'/*',GLOB_ONLYDIR); foreach ($array as $filename) { jpeg2jpg($filename); } $array = glob($path.'/*.jpeg'); foreach ($array as $filename) { $newpath = str_replace(".jpeg", ".jpg", $filename); rename($filename, $newpath); } } これをもっと綺麗なコードにしたいんですが何かありませんか? >>110 それで十分綺麗だと思うけど。 ファイルの検索とリネームを分けるこんな方法もある。 function files($path) { yield from glob($path.'/*.jpeg'); foreach (glob($path.'/*', GLOB_ONLYDIR) as $dir) { yield from files($dir); } } foreach (files('images/') as $jpeg) { $jpg = str_replace(".jpeg", ".jpg", $jpeg); echo "rename($jpeg, $jpg);\n"; } >>111 yieldって構文は知らなかった。ありがとう file_get_contentsで2chの過去ログ保管サイトをスクレイピングしてるんだが、なぜか連続で更新すると内容を取得できないことがある これってサイト側がスクレイピング対策のブロッキングを施してるってことなのかな? >>114 そうかもしれないし、違うかもしれない 事実はサイトの運営者のみが知る 人間っぽくないリクエストを弾く方法はいくつもある 高負荷のリクエストを送るIPをブロックしたり、 ハニーポット置いたり Facebookはマウスの動きまで見てるらしいが そこまでしてる所は稀だろう 1分間のリクエスト数に制限かけたり、 Exponential Backoffで時間置いてからリトライしたら? https://github.com/bandwidth-throttle/token-bucket https://github.com/stechstudio/backoff C#かjavaのコードをPHPのコードに変換できる無料ツールってないかな? ↓このSDKをPHPにしたいんだが https://sevenzip.osdn.jp/sdk.html >>116 変数に$を付けて回るだけでほとんど丸コピーで動くから perlとかphpといったスクリプト系の無料ツールを使うと良いよ ↓こういうjson配列を [ {id:0, name:"ああ", age:20,....}, {id:1, name:"いい", age:21,....}, {id:2, name:"うう", age:22,....}, ]; idとname以外のデータ落として↓一次元の連想配列に変えたいんだけど {0:"ああ",1:"いい",2:"うう",}; array_filterで一発変換みたいことは無理? json向けの組み込み関数は少ない 外部ライブラリ使えば可能だと思うが 関数1つにこだわる必要もないだろう array_columnとarray_combineでどうぞ preg_replaceで$1を$foo["$1"]に置き換えたいのですが $1の意味が違うのでこれではundefined indexになってしまいます ここはどう書くのが正しいですか? すみません自己解決です callbackじゃないとだめみたいですね CRで保存したファイルを読み込んで、 一部の\rとか\nとかtrimで除去してたらおかしくなってしまいました。 CR+LF、LFは問題ありません。 コードでどうにかするのはめんどくさそうなので、 CRのファイルだったらLFに内部で変換するようなことってできますか? >>128 簡単にできるよ! じどうてきにCRをLFに変換する関数を呼ぶ仕組みが用意されてる 入出力ストリームとかストリームラッパーで検索しよう >>128 CRで保存するってどういう事情でそうするの? 個人的に知りたい >>130 アホのマカーが作ったファイルとかでしょ >>129 ありがとうございます。 頂いたヒントからたどり着いた答えは、php://filterですがあってますか? ビルトインのフィルタを確認しましたが、文字コードを変えるものはありましたが、 改行コードを変えれそうなものはなさそうなので、自分で作って登録しろということでしょうか? >>130-131 アホかどうかはおいといて、そういうことですねー >>132 str_replace(["\r\n","\r"],"\n",$subject) でよくね ストリームとか全然わからん Apacheってオワコン? 速度は静的コンテンツについてはnginxの完全勝利 動的ならApache+fpmでnginx+fpmと同程度 .htaccessでどのディレクトリでも 設定変更出来るのはDockerが一般的になった今や無意味 むしろセキュリティ上のリスクにもなり得る preforkモジュールにすればsupervisordなしでDockerコンテナを一つに出来ると言うメリットは一応あるが preforkモジュールはかなり遅い あとApacheの設定ってすごく読みづらくね? nginxの方が直感的に理解しやすい それを5chの僻地で主張することにどんな意味があるの? どっちもオワコンだろ lswsを使ったらもう戻れない >>137 そんなもの流行りませんよ apacheのデファクトぶりに震えて眠れ 「〜はオワコン」って言ってるのは評価軸を決められない未熟なエンジニアか荒らし。 どっちゴミなんでほっとけばいい。 nginxはここ数ヶ月で下落の兆候あり apacheとiisは長期的に下落を続けている かといってlswsが急上昇してるわけでもない さて一体失われたシェアはどこへ行ったのやら >>125 こういう関数がすっと出てくるのはすごいと思う。 mapしてzipしてcollectすればいいと考えても、そこからPHPの関数にたどり着くまでが大変。 覚えりゃいいんだけど、PHP離れるとすぐ忘れるし。 International Semantic Web Research School? >>140 アイじゃなくてエル LiteSpeedWebServer PHPはこのサーバ向けにカスタマイズされた特殊なものが使われてる おかげで設定なしにPHPが導入出来るばかりか 優秀なリポのおかげもあって常に最新のPHPにアップデートされる もちろん普通のPHPのコードが動くので心配はいらない Web設定ツールはPHPで書かれているのでPHPとセットになってるし 特にWP向けに最適化されててWP配信ならWebServer界最速で PHPerのためのサーバといっても過言じゃないわ オープンソース版もある https://openlitespeed.org/ solarisとopen solarisみたいなもんだ openlitespeedって公式dockerないの? 検索しても出ない >>142 貧乏人だからセレロンに8GBのノートPC これじゃあんま強力な環境を作れず IDEよりもエディタで本当はフレームワーク勉強したいけど 開発環境作ると重いしピュアなPHPでゴリゴリ書いてる だから俺はPHPの関数めっちゃ覚えてるよ あーいいパソコンがほしい メモリ8Gってすげえ高性能だな 俺なんかまだ716MBで頑張ってるよ >>148 同意します。 ブラックボックスは小さい方が良いと思う。 >>150 linuxのコンソールからviでも起動してプログラムかいてんのか? それだったら尊敬するわw >>152 xp 5chとネットサーフィンだけだけど全然余裕 ブラウザはnewmoonってのを使ってる >5chとネットサーフィンだけだけど全然余裕 PHP書けよ Atomで書いてるけど、最近Visual Studio Codeに浮気しようか悩んでる >>155 元Atom使いだがVSCodeのがいい htmlとcssが出来るようになった 次はjavascriptかphpを勉強したいと思ってる どちらから先にやるべきだ? 分かりやすく教えろ。 phpはブラウザで使えない javascriptはサーバーで使うには素人は難しい 次はxmlとxsltだ 異論は認めん さぁ頑張ってこい $dbh = new PDO( 'mysql:host=localhost;dbname=db1;charset=utf8', $user, $pass ); っていう、dbへの接続方法 $dbh の中身をどうやって実行するんや!?と思ってたんだけど、 new PDOでPDOが呼ばれた段階でPDO以降の実行結果が代入されるということだから、接続確立したって事でOK? あほだからこんな事で丸一日悩んでしまったんだけど… JavaScript優先だろう JavaScriptは今やhtml5を使うには必須スキルで代えは聞かない。 ブラウザあればすぐに試せるから実行環境が用意しやすい。 Googleドライブにあるスプレットシートなどのマクロ、Google Apps ScriptなんかもJavaScriptと同じ構文で動くし RPGツクールMVなどのゲーム作成でも役に立つ。node.jsのようなサーバーサイドで動くJavaScriptもある。 JavaScript知識は活用範囲は非常に広い phpは基本サーバーサイドでしか動かんし用途が限定的。 ライバル言語が非常に多く、別の言語でもいいってこともしばしば 他に代用がいくらでもあるので優先順位は低い java script とかはやりたい事ググってサンプルスクリプトを見つけて コピペしてあまり理解せず使ってるわ そんなもんでいいだろう <script type="text/php"> $a = Document::getElementById('a'); $a->style(['background-color'=>'#fcf']); $a->innerHTML('<p>hello</p>'); try { Core::ajax('http://example.com', 'get', function($text) { }); } catch (HttpError $e) { } こんなん探せばありそう 素のPHPでWebバックエンド周り(フォームとかセッションとかセキュリティとか)を一通りやるのは悪手とは思わん。 その後はさっさとPHPとおさらばして、他の言語に移るべき。 >>167 MariaDB上のデータベースをネットから検索する簡単なフォームとPHPを書こうと思うんだけど、 面倒くさい。 データベースの構造を元に検索フォームとPHPの雛形を簡単に作ってくれるアプリは無いのかな? それこそWebフレームワークが最も得意なことじゃない bitbucketに対してコミット、プッシュが簡単に出来るphpライブラリって無いかな? 無ければssh2_connectコマンドで頑張るしかないんだけど VPSからPHPで外部サーバへFPTS接続して、ファイルをアップロードしたいのですが、 ftp_ssl_connect()は成功してるようなのですが、 ftp_login($connectId, $userId, $userPass) のところで 「SSL/TLS handshake failed」「Proceed with negotiation」などと出て失敗してしまいます。 php.info()では「ftp」「openssl」は有効になっているのですが、 ほかに何か設定するべきところがあるのでしょうか? 送信元のapacheやvsftpdなど。 送信元のサーバのapacheで証明書とかも要りますか? OSはCentOS6 PHPは5.1.6です。 そんな古いPHPでSFTPとかなんかやばそうw 多分原因もそれでしょ opensslも古そう VPSなら環境のアップデートぐらいしなさいよ こちらも同じ見解に達していました。 ありがとうございます。 OpenSSLが0.98とかで、今や一般的ではないようです。大は小を兼ねるみたいに向こうが新しくても、互換でやってくれるとかじゃないみたいですね。 セキュリティ系は古いもの切り捨てないと穴あいちゃうからねぇ。 今はプログラムよりツールの使い方を学ぶ時代になって 新人にとってはずいぶんつまらない世の中になってしまったな 昔の人がアセンブラ書かないのはプログラマじゃないって言ってるようなもんだろ 時代は常に流れているんだよ >昔の人がアセンブラ書かないのはプログラマじゃないって言ってるようなもんだろ つまらなくなったとはいったけどそこまでいっとらんわ 今と比べて面倒なことをしろなんて主張もするつもりはない スタート地点で面倒なことから始めればそれを面倒とは思わないだろうし 人間後退したくない以上より多くを覚えるならスタート地点は重要だけどね 目的違うしアセンブラから始められてたらもっと楽しかったのだろうとは微塵も思わんけど 出来ることは増えてただろうし習得してればまた考え方も変わるのだろう しっかしーこのスレ死んどるな もうPHPも終わったんだな 死んではいないしょ WEBではなんだかんだこれ以外の選択肢は多くないし てか、5chで情報共有なんかしないわ まぁ、たしかにもっと愚痴がこぼれてきてもイイと思う。 なんで、7.4の阿鼻叫喚がここに流れない??? うちも5.xだわ 昔にとあるツール使って構築したサイトで色々カスタマイズというかいじりまくってしまって 最新版に更新できなくなっちゃってるんだよなぁ だから7系に上げられない さっさとそのコンテンツ終わってくれれば良いんだけど妙に長生きしてるんで困ってる ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる